2017-10-18 12 views
0

내 앱을 게시했습니다. 내 장치에서 원활하게 작동합니다. 하지만 나는 놀이 콘솔에 대한 몇 가지 충돌 보고서를 얻습니다. 그러나 나는 그것을 어떻게 다룰 지 알 수 없었다. 문제가 진행률 대화 상자라는 것을 알고 있습니다. 어떻게해야합니까? 미리 감사드립니다.IllegalStateException asynctask - onPostExecute

충돌 보고서 :

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) 

그리고이 조각에서이 오류 :

공용 클래스 TopFeedsFragment이 조각을 확장은 {

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

먼저 대화 상자가 표시되는지 확인한 다음 –

+2

을 닫으라고 전화를 걸면 다음을 확인하십시오. https://stackoverflow.com/questions/10760809/how-can-you-handle-dismissing-a-dialogfragment-compatibility-lib- 완료시 –

+0

자, 왜 이런 일이 일어 났는지 이해합니다. 고마워요,하지만 곧, "this"를 추가하면 고칠 수 있습니까? – PinkRabbits

답변

1

당신의 AsyncTask를가 액세스 할 수 없습니다 ~에 대한 요소들 . 실행 가능한 행에서이 행을 호출하거나 this.fpd.dismiss();을 시도하십시오.

AsyncTask가 응용 프로그램 주 스레드에서 실행되고 있지 않기 때문에 액세스 할 수 없습니다.

0

문제는 onPostExecute에서 대화 상자를 닫는 것입니다. 기본 활동은 이미 사라질 수 있습니다. 활동이 아직 있는지 확인해야합니다. 그래서 IllegalStateException이 발생합니다. 활동 상태가 사라지고 대화 상자를 닫으려고 할 때 활동 상태가 저장되었지만 작동하지 않습니다.