2017-04-18 1 views
0

私の場合、私のアプリケーションでは、私は更新データベースのためのボタンをタップし、進捗状況のdialogFragmentを表示し、私はホームボタンをタップする - 私のアプリケーションクラッシュ。更新データ中にホームをタップして、dialogFragmentを表示するとクラッシュします。 IllegalStateException

ログのエラー:エラーがポップアップ表示方法の私のクラスのSettingsActivityコードで

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
                     at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1489) 
                     at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1507) 
                     at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:634) 
                     at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:613) 
                     at android.support.v4.app.DialogFragment.dismissInternal(DialogFragment.java:201) 
                     at android.support.v4.app.DialogFragment.dismiss(DialogFragment.java:167) 
                     at com.guardian.glass.ui.settings.SettingsActivity$6.onComplete(SettingsActivity.java:328) 
                     at com.guardian.glass.ui.DialogProgressFragment$1.onDataLoaded(DialogProgressFragment.java:63) 

private void fetchDatabaseFromServer() { 
     UserOperationsTask getCountriesTask = new UpdateCountries(new DialogProgressFragment() { 
      @Override 
      public void onComplete(boolean success) { 
       dismiss(); // here i get error 
       updateDatabaseSize(); 
       updateFilters(); 
       MeasureUtils.makeDefaultTemplate(SettingsActivity.this, true); 
      } 
     }); 
     getCountriesTask.execute(SettingsActivity.this); 
     showProgress(); 
     updateDataBaseProfile(); 
    } 

マイ内部クラス

private class UpdateCountries extends UserOperationsTask { 
     final DialogProgressFragment progressDialog; 

     UpdateCountries(DialogProgressFragment progressDialog) { 
      super(UserOperationsTask.TaskMode.MODE_LOAD_COUNTRIES, null); 
      this.progressDialog = progressDialog; 
     } 

     @Override 
     public void onLoadFinished(Bundle resultData) { 
      setRegionLabels(); 
      updateFilters(); 
      hideProgress(); 
      String errorMessage = resultData.getString(UserOperationsTask.RESULT_ERROR_STRING); 
      if (errorMessage != null) { 
       Log.d(TAG, "getCountriesFromServer error: " + errorMessage); 
       showMessage(getString(R.string.info_title), getString(R.string.server_request_error)); 
      } else { 
       progressDialog.start(SettingsActivity.this, DialogProgressFragment.DialogMode.MODE_UPDATE); 
       progressDialog.setCancelable(false); 
       progressDialog.show(getSupportFragmentManager(), DialogProgressFragment.class.getSimpleName()); 
      } 
     } 
    } 

この問題を解決する最善の方法を私にしてください知らせますか?

+0

は、UIを使用する放送受信機に通知するためのバックグラウンドサービスで更新処理を入れてみてください - 私は解決策をfinded。 –

答えて

1

ありがとうございました! 、私の場合には代わりに

dismiss(); 

より有効に利用する

dismissAllowingStateLoss(); 
0

注意、あなたがonstop後にuiを更新すると、アプリケーションは自動的にクラッシュします。 したがって、アプリケーションのUIを非同期に更新している場合、アクティビティを検出するメカニズムが停止状態ではないことを確認してください。

また、dialogfragmentクラスでcommitをcommitAllowingStateLossに変更することもできます。

0

commit()の代わりにcommitAllowingStateLoss()を使用します。状態の損失が発生した場合でも例外をスローしません。

関連する問題