我偶尔会从用户设备获取崩溃报告。它发生在AysncTask doInBackground()上,但对我来说很奇怪的是,它发生的线只在活动的第1行(ActivityY)。什么可以在那里?我该如何调试?我不知道这是否相关,但似乎只发生在AsyncTask $ 2上。
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at com.X.X.ActivityY$ItemRetrieve.doInBackground(ActivityY.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
活动Y非常大,所以不能发布所有内容,但这里是AsyncTask类ItemRetrieve的基本概要:
class ItemRetrieve extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void...v) {
//Internal Logic
if(does_not_work){
return false;
}
//more code...
return true;
}
@Override
protected void onPostExecute(Boolean result) {
if(result = true){
//more code....
}
else {
//do nothing
}
}
}
ActivityY的第一行只是包声明。
答案 0 :(得分:0)
如果您正在更新UI,发送界面或显示一些toast或任何在doinbackground()中,它将显示此错误,请在postexecuted()中使用它们。
Doinbackground仅用于处理某些不适用于UI的代码