我在android中运行异步任务来ping某个特定的URL,但问题是当url无效或无法访问时发生异常,因为sockettimeoutexception就这个异常我要停止正在运行的任务。 iagve尝试使用取消()方法,但这会导致应用程序崩溃。
我正在使用以下代码。
private class UrlDataProvider3 extends AsyncTask<String, Void, String>
{
String ret="";
int checkStatus;
Boolean exception=false;
@Override
protected String doInBackground(String... url)
{
HttpURLConnection con = null;
try
{
Log.i("RAE", "urlData"+url[0]);
HttpURLConnection.setFollowRedirects(true);
con = (HttpURLConnection) new URL(url[0]).openConnection();
con.setRequestMethod("POST");
con.setConnectTimeout(20000);
}
catch (IOException e)
{
if(e.toString().contains("java.net.SocketTimeoutException:"))
{
return null;
}
}
return ret;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.i("RAE"," Asyc finished");
}
答案 0 :(得分:0)
if((this.downloadNetTask != null)
&& (this.downloadNetTask.getStatus() != AsyncTask.Status.FINISHED)){
this.downloadNetTask.cancel(true);
}
其中downloadNetTask
是您异步任务的实例。在异步任务中,实现以下方法,以便在取消任务时执行所需操作。
protected void onCancelled(List<CompanyNseQuoteDataVO> result)
protected void onCancelled()
答案 1 :(得分:0)
问题是AsyncTask.cancel()调用只调用任务中的onCancel函数。这是您要处理取消请求的位置。
这是我用来触发更新方法的小任务
private class SomeTask extends AsyncTask<Void, Void, Void> {
private boolean running = true;
@Override
protected void onCancelled() {
running = false;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
onUpdate();
}
@Override
protected Void doInBackground(Void... params) {
while(running) {
publishProgress();
}
return null;
}
}
或者你可以像下面一样检查你的任务。
protected Object doInBackground(Object... x) {
while (/* condition */) {
// work...
if (isCancelled())
break;
}
return null;
}