我有以下代码用于通过asynctask执行xml下载,用于android应用程序定位的Android版本> 3。如果网络/互联网连接良好,代码工作得很好。但是,如果互联网连接不好,应用程序将强制关闭。我已尝试抛出不同类型的错误捕获但仍无法解决关闭在低迷的互联网连接上的力量。
任何人都有任何建议我可以尝试
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
}
}
答案 0 :(得分:1)
在这两行之间添加对变量execute的空检查
HttpResponse execute = client.execute(httpGet);
if(execute == null){ return null;} // null check to see if execute is null
content = execute.getEntity().getContent();
onPostExecute中的另一件事,第一行应该检查InputStream结果是否为null!
@Override
protected void onPostExecute(InputStream result) {
if(result == null){
Log.d("TEMP_LOG",Content is null);
return;
}
//do xml reader on inputstream
}
检查并发布您的发现
答案 1 :(得分:1)
嗯......我建议设置连接时间。
HttpClient client = new DefaultHttpClient();
HttpResponse回复; BufferedReader bufferedReader = null;
HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params,20000);
HttpConnectionParams.setSoTimeout(params,20000);
答案 2 :(得分:0)
我找到了根本原因。它不在dobackground中。 在我的情况下,糟糕的连接有时会返回不是xml数据类型而是加载错误, 并将其作为输入流传递给postexecute中的xmlparser。
我没有在我的xmlparser中输入很多错误捕获器。 xmlparser期待xml文档但是收到了非xml内容,因此抛出了我没有用错误捕获器覆盖的null。
感谢您的建议。我也将它放在我的代码中。