共享首选项无法找到已创建的密钥

时间:2017-09-10 23:11:48

标签: java android

以下代码是处理SharedPreference中两个变量的存在的代码段。当我第一次运行应用程序时,它成功保存了vars的值。(editor.commit返回TRUE)。当我退出应用程序并重新启动时, settings.contains无法找到我在第一次运行时创建的两个vars / keys,共享首选项。结果我的应用程序创建了另一个值,这不应该(转到其他条件)。

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    SharedPreferences settings = 
    PreferenceManager.getDefaultSharedPreferences(this);

    SharedPreferences.Editor editor=settings.edit();


    if (settings.contains("passug1"))
        Passug1=settings.getString("passug1","");
    else {
        sendJson1();
        editor = settings.edit();
        //sendJson1();
        editor.putString("passug1", Passug1);
        if (editor.commit())
            System.out.println("Successfully saved");
        else
            System.out.println("Not saved");
        //editor.apply();
    }
    if (settings.contains("passug2"))
        Passug2=settings.getString("passug2","");
    else
    {
        sendJson2();
        editor = settings.edit();
        //sendJson2();
        editor.putString("passug2", Passug2);
        if (editor.commit())
            System.out.println("Successfully saved");
        else
            System.out.println("Not saved");
        //editor.commit();
        //editor.apply();
    }

1 个答案:

答案 0 :(得分:0)

在测试代码后,在我看来,为什么没有保存到您的偏好设置的唯一原因是因为您的Passug1Passug2字段为空,因此您将空值保存到首选项。将空值传递给putString实际上会删除该键的所有现有值。如果您的sendJson1()sendJson2()方法意图Passug1Passug2分配值,则应检查它们是否正常运行。

其次,您在代码中使用System.out.println,这通常不会在正常的logcat Android日志系统中输出任何内容,这可能会使您难以确定代码是否正常工作。您应该使用android.util.Log类中的方法来进行日志记录。

最后,您对settings.edit()的初始调用是多余的。