2017-10-18 5 views
0

Ich habe meine App veröffentlicht. Es funktioniert reibungslos auf meinem Gerät. Aber ich bekomme ein paar Absturzberichte über die Spielekonsole. Aber ich konnte nicht herausfinden, wie ich damit umgehen sollte. Ich weiß, das Problem ist der Fortschrittsdialog. Was soll ich machen? Danke im Voraus.IllegalStateException asynctask - onPostExecute

Crash-Report:

java.lang.IllegalStateException: 
    at android.app.FragmentManagerImpl.checkStateLoss (FragmentManager.java:1328) 
    at android.app.FragmentManagerImpl.enqueueAction (FragmentManager.java:1346) 
    at android.app.BackStackRecord.commitInternal (BackStackRecord.java:729) 
    at android.app.BackStackRecord.commit (BackStackRecord.java:705) 
    at android.app.DialogFragment.dismissInternal (DialogFragment.java:292) 
    at android.app.DialogFragment.dismiss (DialogFragment.java:258) 
    at com.example.genesis.policeradiostream.TopFeedsFragment$Listeleme.onPostExecute (TopFeedsFragment.java:172) 
    at com.example.genesis.policeradiostream.TopFeedsFragment$Listeleme.onPostExecute (TopFeedsFragment.java:95) 
    at android.os.AsyncTask.finish (AsyncTask.java:636) 
    at android.os.AsyncTask.access$500 (AsyncTask.java:177) 
    at android.os.AsyncTask$InternalHandler.handleMessage (AsyncTask.java:653) 
    at android.os.Handler.dispatchMessage (Handler.java:102) 
    at android.os.Looper.loop (Looper.java:153) 
    at android.app.ActivityThread.main (ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke (Native Method) 
    at java.lang.reflect.Method.invoke (Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:902) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:697) 

Und dieser Fehler aus diesem Fragment:

public class TopFeedsFragment Fragment erstreckt {

public static RadiosListAdapter adapter_3; 
protected View mView; 
FlipProgressDialog fpd = new FlipProgressDialog(); 
public TopFeedsFragment() { 
} 


@Override 
public void onPause() { 
    super.onPause(); 
    fpd.dismiss(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_top_feeds, container, false); 
    this.mView = view; 

    List<Integer> imageList = new ArrayList<Integer>(); 
    imageList.add(R.drawable.img_progress_dialog_red_4); 
    imageList.add(R.drawable.img_progress_dialog_blue_4); 

    fpd.setImageList(imageList); 
    fpd.setCanceledOnTouchOutside(true); 
    fpd.setBackgroundColor(Color.TRANSPARENT); 
    fpd.setImageSize(600); 
    fpd.setOrientation("rotationY"); 
    fpd.setDuration(400); 


    new Runnable() { 
     @Override 
     public void run() { 
      new Listeleme().execute(); 
     } 
    }.run(); 

    return view; 
} 


private class Listeleme extends AsyncTask<Void,Void,Void> // LINE 95 
{ 

    String URL="..."; 

    @Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute(); 
     fpd.show(getActivity().getFragmentManager(),""); 

    } 
    @Override 
    protected Void doInBackground(Void... params) { 

     //... 
     //Some Jsoup 
     //... 
     return null; 
    } 
    @Override 
    protected void onPostExecute(Void avoid) 
    { 

     ListView listView_top = (ListView) mView.findViewById(R.id.listview_topfeeds); 
     if (getActivity()!= null) { 
      adapter_3 = new RadiosListAdapter(getActivity(), radioname, listener_number); 
      listView_top.setAdapter(adapter_3); 
     } 


     listView_top.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
       PlayRadioFragment fragment= new PlayRadioFragment(); 
       Bundle bundle= new Bundle(); 
       //... 
      } 
     }); 

     fpd.dismiss(); //LINE 172 

    } 
} 

}

+2

zuerst überprüfen, ob Ihr Dialogfeld angezeigt wird, dann Anruf abweisen –

+2

auch, überprüfen Sie dies: https://StackOverflow.com/Questions/10760809/how-can-you-handle-dismissing-a-dialogfragment-compatibility-lib- on-completi –

+0

Jetzt verstehe ich, warum das passiert. Danke, aber in Kürze, kann ich das einfach mit "this" ergänzen? – PinkRabbits

Antwort

1

Ihre AsyncTask hat keinen Zugang zu ui Elementen . Rufen Sie diese Zeile von einer ausführbaren Datei ab oder versuchen Sie this.fpd.dismiss();.

Die AsyncTask wird nicht im Hauptthread der App ausgeführt, weshalb Sie nicht darauf zugreifen können.

0

Das Problem ist, dass Sie einen Dialog in der onPostExecute ablehnen. Die zugrunde liegende Aktivität könnte bereits weg sein. Sie müssen überprüfen, ob die Aktivität noch vorhanden ist. Deshalb erhalten Sie eine IllegalStateException. Der Status der Aktivität wurde gespeichert, als sie verschwand und Sie den Dialog später schließen wollten, dies wird nicht funktionieren.

Verwandte Themen