使用SharedPreferences存储数据

时间:2018-07-23 15:29:39

标签: android android-fragments fragment sharedpreferences android-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());

一切都很好,例如当用户位于片段2中并退出应用程序时 下次将从片段2开始
但是问题是您下次使用应用程序通过菜单关闭应用程序(按菜单按钮并清除所有应用程序)时,什么也没发生,而且似乎从未调用过此方法

buttonSelect(getSharedPreferences());

我该怎么办? 谢谢

1 个答案:

答案 0 :(得分:1)

最初,使用editor.commit();代替editor.apply();

接下来,逻辑可能是这样的:

  1. 首次启动该应用程序时,请创建一个共享的首选项,并将最后一个片段标志保存为0。这意味着用户位于主片段中。
  2. 每当用户浏览应用程序时,将片段编号保存在“共享首选项”中。因此,这将继续为用户更新最后一个导航的片段。
  3. 下次启动应用程序时,它将具有共享的首选项和最后一个片段号,从“共享的首选项”中获取最后一个导航的片段,并将其传递给方法buttonSelect
  4. 您的方法buttonSelect将加载特定的片段。

注意:请不要忘记在buttonSelectonCreate()上启动应用程序时在活动中调用方法onStart 哦,我完全忘记了,Java中的字符串比较应该通过string.equals()函数完成,而不是通过double equals

完成。