【发布时间】:2014-09-29 04:40:16
【问题描述】:
我在活动的其中一个片段中使用 AsyncTask。
AsyncTask 工作正常,但在屏幕旋转时,它失去了对activity 的引用,变量返回NullPointerException,因此应用程序崩溃了。
我查看了类似的问题,例如 this、this、this 和 this,但我不认为使用 config change hack 是解决方案。
可能导致应用程序崩溃的代码(根据 LogCat,NullPointerException 位于以下行):
Context context = MyActivity.this.getApplicationContext();
我必须在活动和片段类之外的另一个函数中传递上下文。
提前谢谢你。
更新:我的 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)
【问题讨论】:
-
嘿,在执行任何操作之前,您必须检查它是否为空。
-
请发布 logcat 跟踪
-
@Panther 它始终为空,因为屏幕旋转后活动被破坏。这不会导致 AsyncTask 在屏幕旋转后无法运行吗?
-
使用
Context.getApplicationContext()或Activity.getApplication()代替MyActivity.this.getApplicationContext(); -
这里出现了空指针
CommonFunctions.readFile(CommonFunctions.java:262)尝试找出它是什么:-/
标签: android android-fragments android-asynctask