Android: application eventually crashes in Async Task on Post Execute

In my application, I get data from a web server. I used an asynchronous task to retrieve data. But sometimes the problem is the application crashes in onPostExecute on progressDialog.dismiss() . But this does not happen every time. Here is my code:

Async Task

 public class GetFeaturedStoreListAsyncTask extends AsyncTask<Void, Void, String> { Context ctx; ProgressDialog pd; ListView listFeaturedStore; String dataUrl; public static final String TAG = "GetFeaturedStoreAsyncTask"; public static ArrayList<StoreDescriptionDAO> featuredDAOList; public GetFeaturedStoreListAsyncTask(String dataUrl, Context ctx, ListView listFeaturedStore) { this.dataUrl = dataUrl; this.ctx = ctx; this.listFeaturedStore = listFeaturedStore; }//Constructor @Override protected void onPreExecute() { pd = new ProgressDialog(ctx); pd.setMessage(ctx.getResources().getString(R.string.please_wait)); pd.show(); }//onPreExecute @Override protected String doInBackground(Void... params) { Log.v(TAG, "doInBackground called"); JSONParser jsonParser = new JSONParser(); String serverResponse = jsonParser.getJsonString(dataUrl); return serverResponse; }//doInBackground @Override protected void onPostExecute(String response) { FeaturedListAdapter mFeaturedListAdapter = null; mFeaturedListAdapter = getFeaturedListAdapter(response); if(mFeaturedListAdapter != null) { Log.v(TAG, "adapter not null"); listFeaturedStore.setAdapter(mFeaturedListAdapter); listFeaturedStore.setLayoutAnimation(AnimationUtility.fastCascadeListViewAnimation()); pd.dismiss(); }//if else { Log.v(TAG, "adapter null"); pd.dismiss(); SeattleNightLifeUtility.OpenUtilityDialog(ctx, ctx.getResources().getString(R.string.network_error_msg)); }//else }//onPostExecute private FeaturedListAdapter getFeaturedListAdapter(String jString) { FeaturedListAdapter mFeaturedAdapter = null; featuredDAOList = ParsedFeaturedStoreDescData.getFeaturedStoreDesc(jString); if(featuredDAOList != null && featuredDAOList.size() > 0) { mFeaturedAdapter = new FeaturedListAdapter(ctx, featuredDAOList); Log.v(TAG, "arraylist size > 0"); return mFeaturedAdapter; }//if else { return null; }//else }//getFeaturedListAdapter }//GetCityStoreAsyncTask 

Here is my logcat:

 Activity com.dzo.seattlesnightlife.FeaturedActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4a715c38 that was originally added here 02-02 15:23:45.426: E/WindowManager(12627): android.view.WindowLeaked: Activity com.dzo.seattlesnightlife.FeaturedActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4a715c38 that was originally added here 02-02 15:23:45.426: E/WindowManager(12627): at android.view.ViewRoot.<init>(ViewRoot.java:247) 02-02 15:23:45.426: E/WindowManager(12627): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 02-02 15:23:45.426: E/WindowManager(12627): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 02-02 15:23:45.426: E/WindowManager(12627): at android.view.Window$LocalWindowManager.addView(Window.java:424) 02-02 15:23:45.426: E/WindowManager(12627): at android.app.Dialog.show(Dialog.java:241) 02-02 15:23:45.426: E/WindowManager(12627): at com.dzo.seattlesnightlife.asynctask.GetFeaturedStoreListAsyncTask.onPreExecute(GetFeaturedStoreListAsyncTask.java:40) 02-02 15:23:45.426: E/WindowManager(12627): at android.os.AsyncTask.execute(AsyncTask.java:391) 02-02 15:23:45.426: E/WindowManager(12627): at com.dzo.seattlesnightlife.FeaturedActivity$MyTimerTask$1.run(FeaturedActivity.java:173) 02-02 15:23:45.426: E/WindowManager(12627): at android.os.Handler.handleCallback(Handler.java:587) 02-02 15:23:45.426: E/WindowManager(12627): at android.os.Handler.dispatchMessage(Handler.java:92) 02-02 15:23:45.426: E/WindowManager(12627): at android.os.Looper.loop(Looper.java:123) 02-02 15:23:45.426: E/WindowManager(12627): at android.app.ActivityThread.main(ActivityThread.java:4633) 02-02 15:23:45.426: E/WindowManager(12627): at java.lang.reflect.Method.invokeNative(Native Method) 02-02 15:23:45.426: E/WindowManager(12627): at java.lang.reflect.Method.invoke(Method.java:521) 02-02 15:23:45.426: E/WindowManager(12627): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 02-02 15:23:45.426: E/WindowManager(12627): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 02-02 15:23:45.426: E/WindowManager(12627): at dalvik.system.NativeStart.main(Native Method) 02-02 15:23:45.456: V/GetFeaturedStoreAsyncTask(12627): arraylist size > 0 02-02 15:23:45.456: V/GetFeaturedStoreAsyncTask(12627): adapter not null 02-02 15:23:45.526: W/dalvikvm(12627): threadid=1: thread exiting with uncaught exception (group=0x400207d8) 02-02 15:23:45.536: E/AndroidRuntime(12627): FATAL EXCEPTION: main 02-02 15:23:45.536: E/AndroidRuntime(12627): java.lang.IllegalArgumentException: View not attached to window manager 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.view.Window$LocalWindowManager.removeView(Window.java:432) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.app.Dialog.dismissDialog(Dialog.java:278) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.app.Dialog.access$000(Dialog.java:71) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.app.Dialog$1.run(Dialog.java:111) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.app.Dialog.dismiss(Dialog.java:268) 02-02 15:23:45.536: E/AndroidRuntime(12627): at com.dzo.seattlesnightlife.asynctask.GetFeaturedStoreListAsyncTask.onPostExecute(GetFeaturedStoreListAsyncTask.java:63) 02-02 15:23:45.536: E/AndroidRuntime(12627): at com.dzo.seattlesnightlife.asynctask.GetFeaturedStoreListAsyncTask.onPostExecute(GetFeaturedStoreListAsyncTask.java:1) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.os.AsyncTask.finish(AsyncTask.java:417) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.os.AsyncTask.access$300(AsyncTask.java:127) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.os.Handler.dispatchMessage(Handler.java:99) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.os.Looper.loop(Looper.java:123) 02-02 15:23:45.536: E/AndroidRuntime(12627): at android.app.ActivityThread.main(ActivityThread.java:4633) 02-02 15:23:45.536: E/AndroidRuntime(12627): at java.lang.reflect.Method.invokeNative(Native Method) 02-02 15:23:45.536: E/AndroidRuntime(12627): at java.lang.reflect.Method.invoke(Method.java:521) 02-02 15:23:45.536: E/AndroidRuntime(12627): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 02-02 15:23:45.536: E/AndroidRuntime(12627): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 02-02 15:23:45.536: E/AndroidRuntime(12627): at dalvik.system.NativeStart.main(Native Method) 02-02 15:23:45.556: W/ActivityManager(180): Force finishing activity com.dzo.seattlesnightlife/.FeaturedActivity 
+4
source share
3 answers

This problem occurs when trying to show the ProgressDialog after exiting the Activity .

I just solved this problem. Try as follows:

 if ((this.mDialog != null) && this.mDialog.isShowing()) { this.mDialog.dismiss(); this.mDialog = null; } 

in your overridden methods onDestroy() or onStop() .

EDIT: You can create an interface, pass it to AsyncTask (in the constructor), and then call the method in onPostExecute.

For example :

Your interface:

 public interface OnTaskCompleted { void onTaskCompleted(); } 

Your activity:

 public YourActivity implements OnTaskCompleted { //your Activity } 

And your AsyncTask:

 public YourTask extends AsyncTask<Object,Object,Object> { //change Object to required type private OnTaskCompleted listener; public YourTask(OnTaskCompleted listener) { this.listener=listener; } //required methods protected void onPostExecute(Object o) { //your stuff listener.onTaskCompleted(); } } 
+2
source

this problem occurs when trying to show ProgerssDialog here that I have a problem in your code, you must indicate your current activity context in creating the ProgressDialog .

 onPostExecute if (null != pd && pd.isShowing()) { pd.dismiss(); } 
0
source

It looks like the problem is in the adapter class. If you look at the journal entries. It seems that an exception has occurred after the print adapter was not equal to zero. Make sure your adapter is working properly. One more thing I want to say. Why are you using the same code twice.

 pd.dismiss(); 

if in both cases you reject it. better make it global by writing over the if else statement in which it is currently located.

0
source

All Articles