在Activity的第一行执行doInBackground()时发生错误

时间:2014-11-11 17:13:43

标签: android android-asynctask nullpointerexception

我偶尔会从用户设备获取崩溃报告。它发生在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的第一行只是包声明。

1 个答案:

答案 0 :(得分:0)

如果您正在更新UI,发送界面或显示一些toast或任何在doinbackground()中,它将显示此错误,请在postexecuted()中使用它们。

Doinbackground仅用于处理某些不适用于UI的代码