Я использую AsyncTask в одном из фрагментов действия.Ошибка приложения при повороте экрана AsyncTask
AsyncTask работает отлично, но при вращении на экране он теряет ссылку на activity
, и переменная возвращает NullPointerException
, таким образом приложение падает.
Я смотрел на подобные вопросы, как this, this, this и this, но я не думаю, что с помощью изменения конфигурации хака этого решения.
код, который может быть сбой приложения (по LogCat, то NullPointerException
находится в следующей строке):
Context context = MyActivity.this.getApplicationContext();
Я передать контекст в другой функции, проживающих за пределами деятельности и фрагмент класса ,
Заранее спасибо.
Update: Мой LogCat
09-29 09:40:53.415: E/AndroidRuntime(21997): FATAL EXCEPTION: AsyncTask #2
09-29 09:40:53.415: E/AndroidRuntime(21997): java.lang.RuntimeException: An error occured while executing doInBackground()
09-29 09:40:53.415: E/AndroidRuntime(21997): at android.os.AsyncTask$3.done(AsyncTask.java:278)
09-29 09:40:53.415: E/AndroidRuntime(21997): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-29 09:40:53.415: E/AndroidRuntime(21997): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-29 09:40:53.415: E/AndroidRuntime(21997): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-29 09:40:53.415: E/AndroidRuntime(21997): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-29 09:40:53.415: E/AndroidRuntime(21997): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
09-29 09:40:53.415: E/AndroidRuntime(21997): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-29 09:40:53.415: E/AndroidRuntime(21997): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-29 09:40:53.415: E/AndroidRuntime(21997): at java.lang.Thread.run(Thread.java:856)
09-29 09:40:53.415: E/AndroidRuntime(21997): Caused by: java.lang.NullPointerException
09-29 09:40:53.415: E/AndroidRuntime(21997): at com.example.CommonClasses.CommonFunctions.readFile(CommonFunctions.java:262)
09-29 09:40:53.415: E/AndroidRuntime(21997): at com.example.CommonClasses.CommonFunctions.readFileContents(CommonFunctions.java:308)
09-29 09:40:53.415: E/AndroidRuntime(21997): at com.example.android.AvailabilityFragment$AvailabilityData.doInBackground(AvailabilityFragment.java:160)
09-29 09:40:53.415: E/AndroidRuntime(21997): at com.example.android.AvailabilityFragment$AvailabilityData.doInBackground(AvailabilityFragment.java:1)
09-29 09:40:53.415: E/AndroidRuntime(21997): at android.os.AsyncTask$2.call(AsyncTask.java:264)
09-29 09:40:53.415: E/AndroidRuntime(21997): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
Эй, вы должны проверить, не имеет ли значение null или нет перед выполнением какой-либо операции. – Panther
Опубликовать трассировку логарифма, пожалуйста, – Aniruddha
@Panther Это всегда было бы нулевым, потому что активность была разрушена после поворота экрана. Разве это не заставило AsyncTask не запускаться после вращения экрана? –