2013-08-28 179 views
0

我有以下代碼可以執行通過asynctask進行xml下載,適用於android版本> 3的Android應用程序。如果網絡/互聯網連接良好,代碼工作很好。但是,如果互聯網連接不好,應用程序將強制關閉。我嘗試過投入不同類型的錯誤捕捉,但仍然無法解決低溫互聯網上的接近力量。Android應用程序強制關閉低溫互聯網連接

任何人有,我可以嘗試

private class DownloadWebPageXML extends AsyncTask<String, Void, InputStream> { 
    @Override 
    protected InputStream doInBackground(String... urls) { 
     Log.d("mylogitem", "AsyncTask started!"); 
     InputStream content = null; 
     String myurl = urls[0]; 

     AndroidHttpClient client = AndroidHttpClient.newInstance("Android"); 
     HttpGet httpGet = new HttpGet(myurl); 
     try { 
      HttpResponse execute = client.execute(httpGet); 
      content = execute.getEntity().getContent(); 
     } catch (Exception e) { 
      xmldownloaderror = e.getMessage(); 
      Log.d("mylogitem", e.getMessage()); 
     } finally { 
      Log.d("mylogitem", "Closing AndroidHttpClient"); 
      client.close(); 
     } 
     return content; 
    } 

    @Override 
    protected void onPostExecute(InputStream result) { 
     //do xml reader on inputstream 
    } 
} 

回答

1

加上可變空校驗執行,在這兩條線

HttpResponse execute = client.execute(httpGet); 
if(execute == null){ return null;} // null check to see if execute is null 
content = execute.getEntity().getContent(); 

在onPostExecute另一件事之間有任何建議,第一條線應該檢查是否爲InputStream結果爲空!

@Override 
    protected void onPostExecute(InputStream result) { 
     if(result == null){ 
     Log.d("TEMP_LOG",Content is null); 
     return; 
     } 
     //do xml reader on inputstream 
    } 

檢查,併發布你的發現

1

嗯...我建議設置連接時間。

HttpClient client = new DefaultHttpClient();

HttpResponse響應; BufferedReader bufferedReader = null;

HttpParams params = client.getParams();

HttpConnectionParams.setConnectionTimeout(params,20000);

HttpConnectionParams.setSoTimeout(params,20000);

0

我找到了根本原因。它不在背景中。 在我的情況下,糟糕的連接有時會返回不是xml數據類型,而是加載錯誤, ,這是作爲輸入流傳遞給我的xmlparser在postexecute。

我沒有在我的xmlparser中放入很多錯誤捕獲器。 xmlparser期待xml文檔,但收到非xml內容,因此拋出null,其中我沒有用錯誤捕獲器覆蓋。

謝謝你的建議。我也把它放在我的代碼中。

相關問題