2013-05-10 107 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