以下是Asynctask
方法:
public class Read extends AsyncTask<String, Integer, String> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
try {
sUrl = sUrl.trim();
json = lastTweet(sUrl);
return json.getString(params[0]);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
}
}
以及相关的最后一条推文方法:
public JSONObject lastTweet(String username)
throws ClientProtocolException, IOException, JSONException {
HttpGet get = new HttpGet(url.toString());
HttpResponse r = client.execute(get);
int status = r.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity e = r.getEntity();
String data = EntityUtils.toString(e);
JSONArray timeline = new JSONArray(data);
JSONObject last = timeline.getJSONObject(0);
return last;
}
}
所有这些代码都运行良好。截至目前没有任何问题。然而,我想做一些小的修改。当HTTP传输过程中连接丢失时,会抛出RemoteException
并导致应用程序崩溃。
我试图在Async
方法中处理异常,但没能做到
有什么方法可以处理这样的异常吗?
您可以在执行Read
AsyncTask
之前检查网络连接
1.检查连接
if(ifConnectionIsAvailable)
new Read().execute();
2.设置连接超时
HttpGet get = new HttpGet(url.toString());
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 3000;// in milliseconds
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpResponse r = httpClient.execute(get);