我正在创建一个Android应用程序,它涉及将一些数据存储在String ArrayList中,我称之为“contentSpace”。我需要保存此数组以在再次启动时检索应用程序的状态。为此,我使用onSaveInstanceState,并将其传递给onCreate以检索数据。但是,这不起作用。以下是代码的一部分:
ArrayList<String> contentSpace = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
if (savedInstanceState != null) {
contentSpace = savedInstanceState.getStringArrayList("Data");
Toast.makeText(this, "Success", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, "Failure", Toast.LENGTH_LONG).show();
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
if (contentSpace != null) {
savedInstanceState.putStringArrayList("Data", contentSpace);
Toast.makeText(this, "Saved", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, "Not saved", Toast.LENGTH_LONG).show();
}
}
当我运行程序时,Toast显示“已保存”,因此我认为contentSpace包含我需要的数据,而不是null。但是,当我再次启动应用程序时调用onCreate时,Toast会显示“Failure”,表示contentSpace为null。有谁知道这有意义吗?预先感谢您的帮助。
答案 0 :(得分:3)
However, when onCreate is called when I start the app again, Toast displays "Failure,"
这是因为你再次启动活动,onSaveInstanceState
意味着当你重新创建/暂停视图/活动(例如screen rotation
)时,它将调用onSaveInstanceState()方法,然后调用onCreate()
,然后您将获得已保存的数据,但在您的情况下,当您尝试再次启动应用时,数据将无法保存。
<强>溶液强>
即使您退出应用,也可以使用SharedPreferences来保存数据。
答案 1 :(得分:0)
正如官方参考所说:
您可以选择实现onRestoreInstanceState(),系统在onStart()方法之后调用,而不是在onCreate()期间恢复状态。仅当存在要恢复的已保存状态时,系统才会调用onRestoreInstanceState(),因此您无需检查Bundle是否为空
因此,尝试替换您的代码以提取已保存的数据,它将起作用。
public void onRestoreInstanceState(Bundle savedInstanceState){...}