[Android] RuntimeException on AsyncTask : NullPointerException on doInBackground
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