我的AsyncTask
课程出了问题。
我正在取消doInBackground()
方法中的任务,并根据AsyncTask
文档,onCancelled()
在调用cancel()
并且doInBackground
完成时运行。
当我使用isCancelled()
方法确认任务时,该任务已成功取消,但onCancelled()
方法无法在其后运行。
protected void onCancelled ()
Applications should preferably override onCancelled(Object).
This method is invoked by the default implementation of onCancelled(Object).
Runs on the UI thread after cancel(boolean) is invoked
and doInBackground(Object[]) has finished.
这是我doInbackgroud()
的代码(为简单起见,并未显示整个代码),
protected String doInBackground(Void... params) {
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// do Something
} else {
mProgressDialog.dismiss();
Log.e("Status",isCancelled() + ", before cancel");
cancel(true);
Log.e("Status",isCancelled() + ", after cancel");
}
return description.toString();
}
这里是onCancelled()
方法,
我试过了,
protected void onCancelled(String result) {
Log.e("Status",isCancelled() + " oncancelled");
Toast.makeText(c, "failed to load data !", Toast.LENGTH_LONG).show();
}
这个,
@Override
protected void onCancelled() {
super.onCancelled();
Log.e("Status",isCancelled() + " oncancelled");
Toast.makeText(c, "failed to load data !", Toast.LENGTH_LONG).show();
}
这个,
@Override
protected void onCancelled(String result) {
super.onCancelled();
Log.e("Status",isCancelled() + " oncancelled");
Toast.makeText(c, "failed to load data !", Toast.LENGTH_LONG).show();
}
if
的{{1}}部分工作正常并运行doInbackground()
,但是当满足onPostExecute()
条件时,即使执行else
方法,也不会执行onCancelled()
方法任务成功取消。
这是Logcat
条件的else
输出。
false, before cancel
true, after cancel
确认任务已取消。
如果成功取消任务,为什么不执行onCancelled()
方法。 ?
答案 0 :(得分:1)
问题已解决,
问题是,doInBackground()
方法返回String
return description.toString();
并且在String
块内设置了if
的值,但是当执行else
块时,description.toString()
的值未设置,因此保持{ {1}},导致null
方法在执行doinBackground
块时返回null
值。
我不确定为什么它导致else
方法不执行而不抛出任何错误或异常。
我在onCancelled()
块内返回了另一个String
,它解决了问题。
else