Tuesday, 6 August 2013

Android AsyncTask: async-task for each viewpager fragment

Android AsyncTask: async-task for each viewpager fragment

I have viewpager and FragmentStatePagerAdapter. And I used AsyncTask in
the Fragment because there is calculation process in the Fragment. These
fragments will be loaded from FragmentStatePagerAdapter. Here is snap code
from the fragment..
public void refreshView() {
if(asynTask == null) {
asynTask = new SetupTableTask();
}
asynTask.execute();
}
private class SetupTableTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
setupInitialValue();
dashboradView.removeAllViews();
setupTableRow();
return null;
}
@Override
protected void onPostExecute(Void result) {
progressDialog.dismiss();
}
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(getActivity(), "Dashboard",
" Loading...", true, false);
}
}
The problem is that when I swipe 4 or 5 pages quickly. I got this exception.
08-07 10:48:36.366: E/AndroidRuntime(5702): FATAL EXCEPTION: AsyncTask #2
08-07 10:48:36.366: E/AndroidRuntime(5702): java.lang.RuntimeException: An
error occured while executing doInBackground()
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.os.AsyncTask$3.done(AsyncTask.java:299)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
java.util.concurrent.FutureTask.setException(FutureTask.java:124)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
java.lang.Thread.run(Thread.java:856)
08-07 10:48:36.366: E/AndroidRuntime(5702): Caused by:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the
original thread that created a view hierarchy can touch its views.
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4607)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:835)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.view.View.requestLayout(View.java:15129)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.view.View.requestLayout(View.java:15129)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.view.View.requestLayout(View.java:15129)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.view.View.requestLayout(View.java:15129)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.widget.RelativeLayout.requestLayout(RelativeLayout.java:292)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.view.View.requestLayout(View.java:15129)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.view.View.requestLayout(View.java:15129)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.view.View.requestLayout(View.java:15129)
08-07 10:48:36.366: E/AndroidRuntime(5702): at
android.widget.RelativeLayout.requestLayout(RelativeLayout.java:292)
I would like to know can I use the AsyncTask in ViewPager's fragment. Any
idea to overcome this exception? I have already tried the Handler. I got
the same exception like CalledFromWrongThreadException.
Thanks

No comments:

Post a Comment