使用 SharedPreferences 存储数据
Store data with SharedPreferences
我正在尝试使用 SharedPreferences
存储一些数据
存储数据的方法:
public void storeSharedPreferences(String string) {
SharedPreferences sharedPreferences = getSharedPreferences("DATA",MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("FRAGMENT",string);
editor.apply();
}
获取数据的方法:
public String getSharedPreferences() {
SharedPreferences sharedPreferences = getSharedPreferences("DATA",MODE_PRIVATE);
String string = sharedPreferences.getString("FRAGMENT","ONE");
return string;
}
片段一和片段二的方法:
public void buttonSelect(String select) {
if (select == "ONE") {
storeSharedPreferences("ONE");
fragment = new OneFragment();
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_process, fragment, "OneFragment").addToBackStack(null).commit();
}
if (select == "TWO") {
storeSharedPreferences("TWO");
fragment = new TwoFragment();
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_process, fragment, "TwoFragment").addToBackStack(null).commit();
}
}
然后我首先调用了这个方法
buttonSelect(getSharedPreferences());
一切正常,例如当用户处于片段二并退出应用程序时
下次将从片段二开始
但问题是你使用菜单关闭应用程序(按菜单按钮并清除所有应用程序),下次你打开应用程序时没有任何反应,似乎这个方法从未被调用过
buttonSelect(getSharedPreferences());
我能做什么?
谢谢
最初,使用 editor.commit();
而不是 editor.apply();
接下来,逻辑可能是这样的:
- 首次启动应用程序时,创建共享首选项并将最后一个片段标志保存为 0。这意味着用户位于主页片段。
- 每当用户浏览应用程序时,将片段编号保存在共享首选项中。所以这将继续为用户更新最后导航的片段。
- 下次启动该应用程序时,它将与最后一个片段编号共享首选项,从共享首选项中获取最后一个导航片段并将其传递给您的方法
buttonSelect
- 您的方法
buttonSelect
然后将加载特定片段。
注意:不要忘记在应用程序启动时 activity 中调用方法 buttonSelect
,可以是 onCreate()
也可以是 onStart
哦,我完全忘记了,Java 中的字符串比较应该通过 string.equals() 函数而不是双等号
来完成
我正在尝试使用 SharedPreferences
存储一些数据
存储数据的方法:
public void storeSharedPreferences(String string) {
SharedPreferences sharedPreferences = getSharedPreferences("DATA",MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("FRAGMENT",string);
editor.apply();
}
获取数据的方法:
public String getSharedPreferences() {
SharedPreferences sharedPreferences = getSharedPreferences("DATA",MODE_PRIVATE);
String string = sharedPreferences.getString("FRAGMENT","ONE");
return string;
}
片段一和片段二的方法:
public void buttonSelect(String select) {
if (select == "ONE") {
storeSharedPreferences("ONE");
fragment = new OneFragment();
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_process, fragment, "OneFragment").addToBackStack(null).commit();
}
if (select == "TWO") {
storeSharedPreferences("TWO");
fragment = new TwoFragment();
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_process, fragment, "TwoFragment").addToBackStack(null).commit();
}
}
然后我首先调用了这个方法
buttonSelect(getSharedPreferences());
一切正常,例如当用户处于片段二并退出应用程序时
下次将从片段二开始
但问题是你使用菜单关闭应用程序(按菜单按钮并清除所有应用程序),下次你打开应用程序时没有任何反应,似乎这个方法从未被调用过
buttonSelect(getSharedPreferences());
我能做什么? 谢谢
最初,使用 editor.commit();
而不是 editor.apply();
接下来,逻辑可能是这样的:
- 首次启动应用程序时,创建共享首选项并将最后一个片段标志保存为 0。这意味着用户位于主页片段。
- 每当用户浏览应用程序时,将片段编号保存在共享首选项中。所以这将继续为用户更新最后导航的片段。
- 下次启动该应用程序时,它将与最后一个片段编号共享首选项,从共享首选项中获取最后一个导航片段并将其传递给您的方法
buttonSelect
- 您的方法
buttonSelect
然后将加载特定片段。
注意:不要忘记在应用程序启动时 activity 中调用方法 buttonSelect
,可以是 onCreate()
也可以是 onStart
哦,我完全忘记了,Java 中的字符串比较应该通过 string.equals() 函数而不是双等号