相关疑难解决方法(0)

获取异常"IllegalStateException:onSaveInstanceState后无法执行此操作"

我有一个Live Android应用程序,从市场我收到了以下堆栈跟踪,我不知道为什么它发生在应用程序代码中没有发生,但它是由应用程序中的一些或其他事件引起的(假设)

我没有使用Fragments,仍然有FragmentManager的引用.如果任何机构可以对某些隐藏的事实进行一些说明以避免此类问题:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109)
at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399)
at android.app.Activity.onBackPressed(Activity.java:2066)
at android.app.Activity.onKeyDown(Activity.java:1962)
at android.view.KeyEvent.dispatch(KeyEvent.java:2482)
at android.app.Activity.dispatchKeyEvent(Activity.java:2274)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1668)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1720)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1258)
at android.app.Activity.dispatchKeyEvent(Activity.java:2269)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1668)
at android.view.ViewRoot.deliverKeyEventPostIme(ViewRoot.java:2851)
at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2824)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2011)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4025)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)  
Run Code Online (Sandbox Code Playgroud)

android illegalstateexception

350
推荐指数
10
解决办法
23万
查看次数

从onActivityResult显示DialogFragment

我的onActivityResult中有以下代码用于我的片段:

onActivityResult(int requestCode, int resultCode, Intent data){
   //other code
   ProgressFragment progFragment = new ProgressFragment();  
   progFragment.show(getActivity().getSupportFragmentManager(), PROG_DIALOG_TAG);
   // other code
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState   
Run Code Online (Sandbox Code Playgroud)

有谁知道发生了什么,或者我如何解决这个问题?我应该注意到我正在使用Android支持包.

android android-fragments android-dialogfragment

79
推荐指数
6
解决办法
4万
查看次数

在onActivityResult()中提交FragmentTransaction是否安全?

几年前,当我尝试FragmentTransactiononActivityResult()回调中提交内容时,我在我的一个应用程序中遇到了问题.谷歌搜索,我发现这个问题和答案,说

onActivityResult()调用时,活动/片段的状态可能尚未恢复,因此在此期间发生的任何事务都将丢失.

我最终采用了相同答案推荐的解决方案来应用我的应用程序,生活很美好.然而,最近的实验表明,事情可能已经发生了变化,现在从内部投入可能是安全的.FragmentTransactiononActivityResult()

(支持v4)的文档FragmentManager.beginTransaction()将事务的安全窗口定义为:

注意:只能在活动保存其状态之前创建/提交片段事务.如果您尝试在之后FragmentActivity.onSaveInstanceState()(以及之后FragmentActivity.onStart或之前)提交事务FragmentActivity.onResume(),您将收到错误.

阅读文档onActivityResult(),我明白了

您将在onResume()重新启动活动之前立即收到此电话.

这使我相信执行这些事务应该是安全的onActivityResult(),就像onStart()已经被调用的那样,将我置于安全窗口内.

我做了一个应用程序来测试它,我成功地看到了我创建并提交的对话框片段onActivityResult().我有相同的应用程序也记录活动生命周期回调,所以我可以检查他们的订单onStart(),然后onRestoreInstanceState(),我看到,然后onActivityResult()每次.

我错过了什么吗?或者框架已更改,onActivityResult()现在保证是片段交易的安全位置?此行为是否因API级别而异?

我发现了另一个问题和答案似乎与我的文档相同,但两者都超过一年,并没有特别指的是onActivityResult()交易的安全场所.

android android-fragments android-activity android-fragmentactivity fragmentmanager

14
推荐指数
1
解决办法
739
查看次数

使用commitAllowingStateLoss解决"无法在onSaveInstanceState之后执行此操作"的任何副作用

以前,我们没有问题显示以下内容 DialogFragment

在此输入图像描述

// Triggered by button click.
private void openFromCloud() {      
    LoadFromCloudTaskFragment loadFromCloudTaskFragment = new LoadFromCloudTaskFragment();
    FragmentManager fm = this.getSupportFragmentManager();
    fm.beginTransaction().add(loadFromCloudTaskFragment, "loadFromCloudTaskFragment").commit(); 
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我们DialogFragment在按下下面的OK按钮后显示相同的内容Intent,则会发生错误.

在此输入图像描述

private void openFromCloud() {      
    startActivityForResult(Utils.getGoogleAccountCredential().newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
}

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    switch (requestCode) {
    case REQUEST_ACCOUNT_PICKER:
        if (resultCode == RESULT_OK && data != null && data.getExtras() != null) {
            String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
            if (accountName != null) {
                Utils.getGoogleAccountCredential().setSelectedAccountName(accountName);
                LoadFromCloudTaskFragment loadFromCloudTaskFragment = new …
Run Code Online (Sandbox Code Playgroud)

android

3
推荐指数
1
解决办法
4401
查看次数

onRequestPermissionsResult()中的Android java.lang.IllegalStateException

我正在使用SD卡,所以试图在运行时获得许可.这是代码:

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** …
Run Code Online (Sandbox Code Playgroud)

permissions android illegalstateexception onsaveinstancestate

3
推荐指数
1
解决办法
2812
查看次数

IllegalStateException - 调用DialogFragment.show()方法后,无法在onSaveInstanceState之后执行此操作

我正在开发一个关于如何请求ACCESS_FINE_LOCATION权限的Android 6.0应用程序示例,如下图所示.

在此输入图像描述

选择DENY选项时,我想向用户显示一个自定义对话框,但它会抛出以下异常:

IllegalStateException - Can not perform this action after onSaveInstanceState

调用方法时抛出的内容:

grantPermissionDialog.show(getSupportFragmentManager(),"GrantPermissionDialog");
Run Code Online (Sandbox Code Playgroud)

在onRequestPermissionsResult方法中

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(requestCode == REQUEST_ACCESS_FINE_LOCATION){
        if(grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
            Toast.makeText(this, "Location permission granted", Toast.LENGTH_LONG).show();
        }else{
            grantPermissionDialog.show(getSupportFragmentManager(),"GrantPermissionDialog");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想这是因为对getSupportFragmentManager()方法的调用.这是我的GrantPermissionDialog代码.

public class GrantPermissionDialog extends DialogFragment {

private int statusCode;
private String message="El permiso de ubicación es necesario para que esta aplicación funcione.";
private String positiveButtonText="Salir";
private String …
Run Code Online (Sandbox Code Playgroud)

android illegalstateexception android-dialogfragment

1
推荐指数
1
解决办法
497
查看次数