Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java savedInstanceState始终为空_Java_Android - Fatal编程技术网

Java savedInstanceState始终为空

Java savedInstanceState始终为空,java,android,Java,Android,所以我的OnsavedInstanceState中有这个代码 @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); String [] a={"haha"}; savedInstanceState.putStringArray("MyStringarray", a); Toast.ma

所以我的OnsavedInstanceState中有这个代码

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    String [] a={"haha"};
    savedInstanceState.putStringArray("MyStringarray", a);
    Toast.makeText(context, "Saved array", Toast.LENGTH_SHORT).show();
}
我的onCreate中有这个代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if(savedInstanceState==null){
        Toast.makeText(this, "not there", Toast.LENGTH_SHORT).show();
    }else{
        Toast.makeText(this, "is there", Toast.LENGTH_SHORT).show();
    }
}
为什么祝酒词总是说不在那里?我打开应用程序,然后切换到另一个应用程序,它显示了toast保存的数组,但当我重新打开应用程序时,它说不存在,即使捆绑包中应该有包含“haha”的字符串数组


非常感谢

onSaveInstanceState()
中,您正在修改
savedInstanceState
而不保存此修改的对象。如果
super
复制了您的
,则不会保存此修改

尝试调用super.onSaveInstanceState(savedInstanceState)

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    String [] a={"haha"};
    savedInstanceState.putStringArray("MyStringarray", a);
    super.onSaveInstanceState(savedInstanceState);
    Toast.makeText(context, "Saved array", Toast.LENGTH_SHORT).show();
}

onSaveInstanceState()
中,您正在修改
savedInstanceState
而不保存此修改的对象。如果
super
复制了您的
,则不会保存此修改

尝试调用super.onSaveInstanceState(savedInstanceState)

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    String [] a={"haha"};
    savedInstanceState.putStringArray("MyStringarray", a);
    super.onSaveInstanceState(savedInstanceState);
    Toast.makeText(context, "Saved array", Toast.LENGTH_SHORT).show();
}

问题可能在于如何在清单中定义活动。例如,如果您的活动设置为android:clearTaskOnLaunch=“true”,我认为您不会收到保存的捆绑包。有关各种活动设置的详细信息,请参阅


您还可以检查其他被重写的方法。例如,如果您重写一个,并执行一些奇怪的操作,则可能会将活动堆栈搞得一团糟。是否在代码中的任何地方调用finish(),如果是,请将其删除并查看发生了什么。

问题可能在于如何在清单中定义活动。例如,如果您的活动设置为android:clearTaskOnLaunch=“true”,我认为您不会收到保存的捆绑包。有关各种活动设置的详细信息,请参阅


您还可以检查其他被重写的方法。例如,如果您重写一个,并执行一些奇怪的操作,则可能会将活动堆栈搞得一团糟。您是否在代码中的任何地方调用finish(),如果是,请将其删除并查看发生了什么。

不要将此方法与活动生命周期回调混淆,例如onPause(),当活动放置在背景中或在其销毁过程中,或在顶部()销毁之前调用。调用onPause()和onStop()而不是此方法的一个示例是当用户从活动B导航回活动a时:不需要调用B上的onSaveInstanceState(Bundle),因为该特定实例永远不会被还原,所以系统避免调用它。调用onPause()和非onSaveInstanceState(Bundle)的一个示例是在活动A前面启动活动B:系统可能避免调用onSaveInstanceState(Bundle)如果活动A在活动B的生命周期内未被终止,则该活动A的用户界面状态将保持不变

不要将此方法与活动生命周期回调混淆,例如onPause(),当活动被放置在后台或正在进行销毁时总是调用该回调,或者在销毁之前调用的onStop()。调用onPause()和onStop()而不是此方法的一个示例是当用户从活动B导航回活动a时:不需要调用B上的onSaveInstanceState(Bundle),因为该特定实例永远不会被还原,所以系统避免调用它。调用onPause()和非onSaveInstanceState(Bundle)的一个示例是在活动A前面启动活动B:系统可能避免调用onSaveInstanceState(Bundle)如果活动A在活动B的生命周期内未被终止,则该活动A的用户界面状态将保持不变

如果保存是指savedInstanceState=savedInstanceState.putStringArray(“MyStringarray”,a);如果这不是你的意思,那就行不通了。你能详细说明一下吗?不,我的意思是
super.onSaveInstanceState(savedInstanceState)这将执行保存操作。我把代码放在我的意思上。然后检查nathan的答案。如果保存的意思是savedInstanceState=savedInstanceState.putStringArray(“MyStringarray”,a);如果这不是你的意思,那就行不通了。你能详细说明一下吗?不,我的意思是
super.onSaveInstanceState(savedInstanceState)这将执行保存操作。我把代码放在我的意思上。然后检查nathan的答案。我想你应该调用super.onSaveInstanceState(savedInstanceState);在method的末尾,只有在活动被终止时才会调用onSaveInstanceState方法;在方法的末尾,只有当活动被终止时,才会调用saveInstanceState方法。是的,我仔细检查了我的清单,没有任何相关内容……我还添加了android:alwaysRetainTaskState=“true”但它仍然不起作用……问题是它应该起作用=/但它不起作用,我不知道为什么……我完全按照m0skit0告诉我的做了,并修改了状态,但在这种奇怪的情况下仍然不能很好地工作。通常,最好的做法是创建一个干净的测试项目。只需添加1个活动并实现oncreate和onSavedInstance。一旦你让它在一个受控的环境中工作,看看你的测试项目和真实的项目有什么不同。是的,我仔细检查了我的清单,没有任何相关内容……我还添加了android:alwaysRetainTaskState=“true”但它仍然不起作用……问题是它应该起作用=/但它不起作用,我不知道为什么……我完全按照m0skit0告诉我的做了,修改了状态,但在这种奇怪的情况下仍然不起作用。通常最好的办法是j