[Android] RuntimeException on AsyncTask : NullPointerException on doInBackground

Mon, June 24, 2013 - 1 min read

Android アプリで、AsyncTask を実行中に RuntimeException が発生して、クラッシュするバグの解決方法をメモ。

"Thread: AsyncTask #5, Exception: java.lang.RuntimeException: An error occured while executing doInBackground()
  at android.os.AsyncTask$3.done(AsyncTask.java:278)
  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
  at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
  at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.NullPointerException
  at com.example.myapp.d.c$a.doInBackground(SourceFile:1)
  at android.os.AsyncTask$2.call(AsyncTask.java:264)
  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
  ... 5 more"

doInBackground メソッド内で、NullPointerException の例外が発生している箇所を try/catch ブロックで上手く囲んで、メソッドの最後で return null; を返すようにすればOKです。

また、このとき onPostExecute メソッド内で、引数に null が渡ってきたときに Async タスクが失敗したときの処理を行う必要があります。

[参考]

android - AsyncTask doInBackground returning a nullpointerexception only sometimes - Stack Overflow

Android : Getting RuntimeException on AsyncTask - Stack Overflow