我正在创建一个 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 包含我需要的数据并且不为空。但是,当我再次启动应用程序时调用 onCreate 时,Toast 显示“失败”,据说表明 contentSpace 为空。有人知道这有意义吗?预先感谢您的帮助。
最佳答案
However, when onCreate is called when I start the app again, Toast displays "Failure,"
这是因为您要再次启动 Activity ,onSaveInstanceState
意味着当您重新创建/暂停 View /Activity (例如屏幕旋转
)时,它将调用onSaveInstanceState() 方法,然后调用 onCreate()
,届时您将获得已保存的数据,但在您的情况下,当您尝试再次启动应用程序时,数据将不会保存。
解决方案:
使用SharedPreferences即使您退出应用程序,也可以保存数据。
关于java - 在 Android 中通过 onCreate 使用 onSaveInstanceState 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24375083/