Android 检查权限后无法更新视图

Android 检查权限后无法更新视图,android,android-permissions,Android,Android Permissions,我正在使用以下代码检查运行时请求的危险权限 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int PERMISSION_ALL = 1; String[] PERMISSIONS = {Manifest.permission.R

我正在使用以下代码检查运行时请求的危险权限

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



    int PERMISSION_ALL = 1;
    String[] PERMISSIONS = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_SETTINGS, Manifest.permission.VIBRATE};
    if(!hasPermissions(this, PERMISSIONS)){
        ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
    }
    else
    {
        initSetUp();
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        initSetUp();
    }
    else {
         Toast.makeText(MainActivity.this,ConstantParams.PERMISSION_GRANT_REQUIRED,Toast.LENGTH_LONG).show();
            }
}

public static boolean hasPermissions(Context context, String... permissions) {
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}


public void initSetUp()
{
    mToolbar = (Toolbar) findViewById(R.id.toolbar);

    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    drawerFragment = (FragmentDrawer)
            getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar);
    drawerFragment.setDrawerListener(this);

    // display the first navigation drawer view on app launch
    displayView(0,true);
}
但是,当我在权限请求屏幕上单击“允许”时,应用程序崩溃,我得到以下异常:

 30242-30242/com.abc.xyz E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.abc.xyz, PID: 30242
java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=1, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.abc.xyz/activity.MainActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4998)
             at   android.app.ActivityThread.handleSendResult(ActivityThread.java:5041)
        at android.app.ActivityThread.access$1600(ActivityThread.java:229)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1875)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:7325)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
  Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
        at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1500)
        at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1518)
        at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:634)
        at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:613)
        at activity.MainActivity.displayView(MainActivity.java:214)
        at activity.MainActivity.initSetUp(MainActivity.java:105)
        at activity.MainActivity.onRequestPermissionsResult(MainActivity.java:73)
        at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7291)
        at android.app.Activity.dispatchActivityResult(Activity.java:7169)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4994)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:5041)
在android.app.ActivityThread.access$1600(ActivityThread.java:229) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1875)上 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:148) 位于android.app.ActivityThread.main(ActivityThread.java:7325) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1230)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

上,问题发生在设置抽屉时,而不是检查权限时。 我对抽屉布局没有太多经验,但问题是因为缺少承诺