2012-03-28 91 views
0

下面的代碼崩潰是沒有interenet連接時:崩潰的時候沒有互聯網連接

public String gourl(String myurl,String params) { 

     URL url; 
     String rasp = ""; 

     try { 
      url = new URL(myurl + params); 
      BufferedReader rd = new BufferedReader(new InputStreamReader(
        url.openStream())); 
      String line = ""; 
      while ((line = rd.readLine()) != null) { 
       rasp=rasp + line; 
      } 

      return rasp; 
     } catch (Exception e) { 
      Log.w("DHA", "EXCEPTIE URL"); 
     }  
     return null; 
} 

我怎樣才能防止這種情況發生?

+0

哪個例外? – Blackbelt 2012-03-28 13:11:27

+0

當我寫你接受答案的同時。 :) – Sameer 2012-03-28 13:31:09

回答

6

檢查連接之前執行的方法,這樣的事情:

public boolean isNetworkConnected() { 
     final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo(); 
     return activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED; 
    } 
+0

非常好的解決方案謝謝。 – opc0de 2012-03-28 13:19:59

+0

如果我打電話給它兩次應用程序崩潰 – opc0de 2012-03-28 13:59:25

+3

我使用這種方法 - 從來沒有問題。檢查權限。並請顯示logcat。 – 2012-03-28 14:11:11

1

你檢查什麼myurlparams中值的方法?

這可能是url.openStream()失敗並導致NullPointerException。

這也是有幫助的,而這樣做:

Log.w("DHA", "EXCEPTIE URL:" + e.toString()); 

然後你會看到唯一的例外是什麼,而不是猜測。

1

檢查所有互聯網連接

支持WiFi

public boolean isWifi(Context context){ 
    try{ 
    WifiManager wifi=(WifiManager) 

context.getSystemService(Context.WIFI_SERVICE); 
    if(wifi.isWifiEnabled()){ 
    return true; 
    }else{ 
     return false; 
    } 
    } 
    catch(Exception e){ 
     e.getMessage(); 
     return false; 
    } 
} 

其他網絡

public boolean isOline(Context context){ 
    try{ 
     ConnectivityManager cm=(ConnectivityManager) 

    context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if(cm==null) 
      return false; 
     NetworkInfo info=cm.getActiveNetworkInfo(); 
     if(info==null) 
      return false; 
     return info.isConnectedOrConnecting(); 
    } 
    catch(Exception e){ 
     e.getMessage(); 
     return false; 
    } 
} 

如果他們中任何一個存在,那麼處理WS別的節目alert.And永遠不要忘記提及

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>