2013-05-10 96 views
3

我试图检查我的SherlockFragment中的网络连接,但无法识别getSystemService()方法。检查片段中的网络连接

下面是我的代码(来自http://developer.android.com/training/basics/network-ops/connecting.html

ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     // fetch data 
    } else { 
     // display error 
    } 

预先感谢

回答

23

方法getSystemService()未在片段定义,因此获得第一使用getActivity(),例如活性:

ConnectivityManager connMgr = (ConnectivityManager) getActivity() 
          .getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 

if (networkInfo != null && networkInfo.isConnected()) { 
    // fetch data 
} else { 
    // display error 
} 

psadditianal note:如果存在片段运行时未附加任何活动的潜在风险,请首先检查getActivity()是否返回null

干杯!

+0

它工作了!非常感谢。 – 2013-05-10 11:44:13

+0

片段附加到活动。如果没有附加,风险是什么? – 2013-05-10 12:04:21

+0

如果没有附加,'getActivity()'可能返回'null',因此'getActivity()。getSystemService()'抛出'NullPointerException'。但是,这取决于您调用此代码的位置以及如何创建碎片。没有什么可担心的,只是保持在你的脑海里;) – Trinimon 2013-05-10 12:12:48

2

更好的方法是在try-catch中使用网络功能代码。并捕捉异常如果网络不可用。如果您使用任何网络检查代码,那么您也需要捕获异常。因为您没有其他方法来检查它是否成功,也就是说,如果网络在该功能之间遗失了,则完成。

+0

感谢提供的信息 – 2013-05-10 11:44:58

+0

我第一次搜索的方式是相同的,最终我达到了这个目的。我只是与你分享。 – Jithu 2013-05-10 11:49:12