Error en el método ProgressDialog.dimiss cuando se llama por AsyncTask

Utilizo AsyncTask para obtener datos de un servidor para construir el adaptador para mi listview . Pero si utilizo ProgressDialog dentro de mi AsyncTask , consigo un error.

Código:

Archivo AsyncTaskSetAdapterListViewDetail.java

 public class AsyncTaskSetAdapterListViewDetail extends AsyncTask<Void, Void, List<Map<String, Object>>> { private final String query; private final Context ctx; private final ProgressDialog Loading; public final HashMap<String, Object> Data; private final View listv; public AsyncTaskSetAdapterListViewDetail(final String query, final Context ctx, View listv, HashMap<String, Object> Data) { this.query = query; this.ctx = ctx; this.Loading = new ProgressDialog(ctx); this.listv = listv; this.Data = Data; } @Override protected void onPreExecute(){ super.onPreExecute(); Loading.setMessage("Loading..."); Loading.setCancelable(false); Loading.show(); } @Override protected List<Map<String, Object>> doInBackground(final Void... voids) { List<Map<String, Object>> BrightCoveData = new ArrayList<Map<String, Object>>(); BrightCoveClient bcClient = new BrightCoveClient(); String QueryType = (String) Data.get("QueryType"); if(QueryType == "bccategory") { BrightCoveData = bcClient.QueryData(query, ctx); } else if(QueryType == "bcplaylist") { BrightCoveData = bcClient.QueryDataPlaylist(query, ctx); } return BrightCoveData; } @Override protected void onPostExecute(List<Map<String, Object>> result) { super.onPostExecute(result); String[] fromStr = (String[]) Data.get("StringFrom"); int[] toInt = (int[]) Data.get("ToInt"); String strClass = listv.getClass().toString(); String[] typeView = strClass.split("\\."); int resource = (Integer) Data.get("Resource"); String type = typeView[typeView.length - 1]; for (Map<String, Object> map : result) { String videoID = map.get("videoID").toString(); String name = map.get("title").toString(); String description = map.get("description").toString(); String duration = map.get("duration").toString(); if (!VideoFunctions.isVideoExisted(videoID)) { VideoFunctions.addVideo(videoID, name, "", description, duration, ""); } } ListAdapter adapter = new OoyalaVideoListAdapter(ctx, result, resource, fromStr,toInt); if ( type.equalsIgnoreCase("ListView")) { ((ListView) listv).setAdapter(adapter); } else { ((AbsSpinner) listv).setAdapter((SpinnerAdapter) adapter); } if (Loading.isShowing()){ Loading.dismiss(); } } } 

Error:

 12-20 16:04:15.347: E/AndroidRuntime(13344): java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{422262a8 VE.... R.....I. 0,0-0,0} not attached to window manager 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:370) 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:299) 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:84) 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.app.Dialog.dismissDialog(Dialog.java:329) 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.app.Dialog.dismiss(Dialog.java:312) 12-20 16:04:15.347: E/AndroidRuntime(13344): at RanhTV.Utils.AsyncTaskSetAdapterListView.onPostExecute(AsyncTaskSetAdapterListView.java:90) 12-20 16:04:15.347: E/AndroidRuntime(13344): at RanhTV.Utils.AsyncTaskSetAdapterListView.onPostExecute(AsyncTaskSetAdapterListView.java:1) 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.os.AsyncTask.finish(AsyncTask.java:632) 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.os.AsyncTask.access$600(AsyncTask.java:177) 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.os.Handler.dispatchMessage(Handler.java:102) 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.os.Looper.loop(Looper.java:136) 12-20 16:04:15.347: E/AndroidRuntime(13344): at android.app.ActivityThread.main(ActivityThread.java:5017) 12-20 16:04:15.347: E/AndroidRuntime(13344): at java.lang.reflect.Method.invokeNative(Native Method) 12-20 16:04:15.347: E/AndroidRuntime(13344): at java.lang.reflect.Method.invoke(Method.java:515) 12-20 16:04:15.347: E/AndroidRuntime(13344): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 12-20 16:04:15.347: E/AndroidRuntime(13344): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 12-20 16:04:15.347: E/AndroidRuntime(13344): at dalvik.system.NativeStart.main(Native Method) 

¿Qué significa este error? He utilizado AsyncTask antes para otras vistas de lista y no tiene un error. Tal vez la razón es porque he reemplazado el diseño?

Archivo detail_layout.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="1" > <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.5" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="2" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:background="#192832"> <com.brightcove.player.view.BrightcoveVideoView android:id="@+id/bc_player" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="5dp" android:background="#000000" > </com.brightcove.player.view.BrightcoveVideoView> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:background="#193222"> <TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" /> </LinearLayout> </TabHost> </LinearLayout> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.5" android:orientation="vertical"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/List_Episode" android:layout_marginTop="2dp" android:listSelector="@drawable/list_selector"> </ListView> </LinearLayout> </LinearLayout> 

Intente descartar su onPostExecute progreso al inicio de su método onPostExecute .

  @Override protected void onPostExecute(List<Map<String, Object>> result) { super.onPostExecute(result); if (Loading.isShowing()){ Loading.dismiss(); } ..........//your code .................} 

Prueba esto,

 public AsyncTaskSetAdapterListViewDetail(final String query, final Context ctx, View listv, HashMap<String, Object> Data) { this.query = query; this.ctx = ctx; if(this.Loading!=null) { if (Loading.isShowing()) Loading.dismiss(); } this.Loading = new ProgressDialog(ctx); this.listv = listv; this.Data = Data; } 
  • Cómo hacer una lista <enum> parcelable?
  • ¿Cuál es el funcionamiento de setTag y getTag en el patrón de ViewHolder?
  • Agregar vistas de forma programática en un diseño (lineal) (que está dentro de un ScrollView)
  • Fragmento implementando AsyncTask y Listview en android
  • Cómo implementar simple como botón en listview de cada elemento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.