我的應用程序的行爲運行在容器活動上,其上有不同的片段。現在在這些片段中,我執行異步任務以從Web API檢索數據。當異步任務尚未完成時,我遇到了一個問題,並且我試圖切換片段,這會導致錯誤。我得到了錯誤的邏輯,因爲任務完成後,它會去執行onPostExecute()執行任務後的其他UI相關的功能和它執行的片段現在已經消失,現在有一個新的片段。有沒有辦法解決這個問題?根據研究,我已經爲片段包含了setRetainInstance(true),但仍然存在錯誤。asnycTask正在運行時切換片段導致錯誤
這裏是我切換片段:
Fragment fragment = new Fragment();
fragment.setRetainInstance(true);
fragment = new MyFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.main_container, fragment)
.commit();
這裏是我的AsyncTask的樣品
private class SomeTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... id) {
// TODO Auto-generated method stub
//do some logic here on getting data from web api
return null;
}
protected void onPostExecute(Void x) {
//do some UI functions here
}
}
我通常用空在我的參數,因爲我經常使用類/全局變量,所以我可以在任何地方訪問這些在我的班級裏。
UPDATE:
logcat的錯誤:
09-01 14:50:33.764: E/AndroidRuntime(617): FATAL EXCEPTION: AsyncTask #2
09-01 14:50:33.764: E/AndroidRuntime(617): java.lang.RuntimeException: An error occured while executing doInBackground()
09-01 14:50:33.764: E/AndroidRuntime(617): at android.os.AsyncTask$3.done(AsyncTask.java:299)
09-01 14:50:33.764: E/AndroidRuntime(617): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-01 14:50:33.764: E/AndroidRuntime(617): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-01 14:50:33.764: E/AndroidRuntime(617): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-01 14:50:33.764: E/AndroidRuntime(617): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-01 14:50:33.764: E/AndroidRuntime(617): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-01 14:50:33.764: E/AndroidRuntime(617): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-01 14:50:33.764: E/AndroidRuntime(617): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-01 14:50:33.764: E/AndroidRuntime(617): at java.lang.Thread.run(Thread.java:856)
09-01 14:50:33.764: E/AndroidRuntime(617): Caused by: java.lang.NullPointerException
09-01 14:50:33.764: E/AndroidRuntime(617): at com.nurserversity.com.Helpers.ApiHelper.<init>(ApiHelper.java:49)
09-01 14:50:33.764: E/AndroidRuntime(617): at com.nurserversity.com.DashboardHome$GetProductBundlesTask.doInBackground(DashboardHome.java:115)
09-01 14:50:33.764: E/AndroidRuntime(617): at com.nurserversity.com.DashboardHome$GetProductBundlesTask.doInBackground(DashboardHome.java:1)
09-01 14:50:33.764: E/AndroidRuntime(617): at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-01 14:50:33.764: E/AndroidRuntime(617): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-01 14:50:33.764: E/AndroidRuntime(617): ... 5 more
發佈錯誤。 – 2014-09-01 07:02:02
請將您的logcat錯誤與一些足夠的代碼一起發佈。你沒有顯示出必要的部分 – GrIsHu 2014-09-01 07:05:07
查看我更新的帖子。 – ljpv14 2014-09-01 07:09:34