2013-10-29 50 views
3

在我的應用程序完全依賴於網絡,即,我從網絡獲取數據(帶文本的圖像),並只顯示在我的佈局。爲此,我的主要問題是如何處理網絡連接。我使用下面的代碼來檢查設備是否連接到網絡。如何處理Android應用程序中的網絡連接不暢?

public static boolean hasConnection() { 
    ConnectivityManager cm = (ConnectivityManager) MbridgeApp.getContext().getSystemService(
     Context.CONNECTIVITY_SERVICE); 

    NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    if (wifiNetwork != null && wifiNetwork.isConnected()) { 
     return true; 
    } 

    NetworkInfo mobileNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
    if (mobileNetwork != null && mobileNetwork.isConnected()) { 
     return true; 
    } 

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if (activeNetwork != null && activeNetwork.isConnected()) { 
     return true; 
    } 

    return false; 
    } 
  1. 這段代碼給出了關於該設備是否連接到網絡或不的信息。
  2. 我的問題會出現,一段時間網絡連接但信號強度太低,這種情況下,我的應用程序需要更多的時間(從API中獲取數據),經過很長時間的應用程序凍結或崩潰。
  3. 是否有可能設置信號強度的最小範圍,如果它低於範圍,我只是通知吐司消息給用戶。
+0

看到我的[answer](http://stackoverflow.com/a/17718233/2198638),也許它可以幫助你。 – Brtle

回答

0

您可以爲您的http調用設置一個超時,同時在單獨的線程上使用它們,並在爲用戶友好的用戶界面加載時顯示一些進度。

編輯

可以使用的AsyncTask來獲取數據,並沒有需要檢查的連接,作爲會的AsyncTask在任何時間完成,如果設備沒有連接。

final ServerHit serverHit = new ServerHit(this); 
serverHit.execute(url); 
// set a timeout 
Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       if (serverHit.getStatus() == AsyncTask.Status.RUNNING) 
        serverHit.cancel(true); 
      } 
     }, timeout); 
+0

我爲我的api調用的 – Aerrow

+0

使用asyc任務,您可以使用帶有postDelayed的hanlder來取消AsyncTask。 –

+0

您可以使用緩存,離線,請求失敗,超過超時強制應用程序從緩存中讀取 –

相關問題