2

私はsdカードを使用しているので、実行時に許可を得ようとしています。ここでは、コードは次のようになります。Androidのjava.lang.IllegalStateException onRequestPermissionsResult()

できるだけ早く私はそれがアンドロイド@ =結果ResultInfo {提供 「失敗投げて許可できるようにしていますよう
public class MainActivity extends AppCompatActivity implements FileListFragment.OnFragmentInteractionListener { 

private static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 111; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 
     } 

     ................... 
     ................ 
    } 

@Override 
    public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

        FileListFragment fileListFragment = FileListFragment.newInstance(0); // **Error line** 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.fragment_container, fileListFragment) 
       .commit(); 
       } else { 

        finish(); 
       } 
       return; 
      } 
     } 
    } 

............................. 
.................................. 
.......................... 

} 

:requestPermissions :,要求= 111、結果= -1、データ=インテント{act = android.content.pm.action.REQUEST_PERMISSIONS(EXTRASED)}}}アクティビティ{com.kaushik.fileexplorer/com.kaushik.fileexplorer.MainActivity}:java.lang.IllegalStateException:onSaveInstanceStateの後にこのアクションを実行できません "。ここに詳細logcat:

08-23 16:49:29.497 3215-3215/com.kaushik.fileexplorer E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.kaushik.fileexplorer, PID: 3215 
                     java.lang.RuntimeException: Failure delivering result ResultInfo{[email protected]:requestPermissions:, request=111, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.kaushik.fileexplorer/com.kaushik.fileexplorer.MainActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
                      at android.app.ActivityThread.deliverResults(ActivityThread.java:3699) 
                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 
                      at android.app.ActivityThread.-wrap16(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                     Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
                      at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1533) 
                      at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1551) 
                      at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:696) 
                      at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:662) 
                      at com.kaushik.fileexplorer.MainActivity.onRequestPermissionsResult(MainActivity.java:76) 
                      at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:6553) 
                      at android.app.Activity.dispatchActivityResult(Activity.java:6432) 
                      at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) 
                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)  
                      at android.app.ActivityThread.-wrap16(ActivityThread.java)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:148)  

どのようなコードで問題がありますか?

+0

あなたのonSaveInstanceStateコードを追加しますか? –

+0

'manifest'ファイルに権限を追加しましたか?実行していない場合は、実行時に許可を求めることはできません。 – Abbas

+0

@SohailZahid私はonSaveInstanceState()をオーバーライドしませんでした。 –

答えて

5

あなたはより多くのハック修正のようなものです)(

FileListFragment fileListFragment = FileListFragment.newInstance(0); // **Error line** 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.fragment_container, fileListFragment) 
       .commitAllowingStateLoss(); 

がcommitAllowingStateLossを使用してthis link

3

このエラーは、アクティビティ状態が保存されておらず、その前にFragmentを追加しているためです。

FileListFragment fileListFragment = FileListFragment.newInstance(0); 
    getSupportFragmentManager().beginTransaction() 
      .add(R.id.fragment_container, fileListFragment) 
      .commitAllowingStateLoss(); 

とあなたのonSaveInstanceState()メソッドをオーバーライドし、それからスーパー()を削除します。このコード

使用。

0

を確認してください()commitAllowingStateLossを追加する必要があります。

この問題はこの問題と非常によく似ており、よく説明されていますhere

代わりに、ブール値フラグをonRequestPermissionsResultに設定し、onPostResume(アクティビティの場合)またはonResume(フラグメントの場合)を使用してトランザクションをコミットする方がよい場合があります。

関連する問題