2017-09-10 64 views
2

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

@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(); 
    } 
+0

我应该在某处预先为共享偏好创建一个xml吗?我没有那样做。 –

+0

请给我们任何一个可以编译和运行的[mcve]。 –

回答

0

测试你的代码后,在我看来,没有什么为什么被保存到你的喜好是因为你的Passug1Passug2字段为空,因此要保存空值偏好的唯一原因。将空值传递给putString实际上将使用该键删除任何现有的值。如果您的sendJson1()sendJson2()方法是打算Passug1Passug2分配一个值您应该检查,看他们是否正常运行。

其次,你在你的代码中使用System.out.println,它通常不会在普通的logcat Android日志系统中输出任何东西,这可能会让你很难确定你的代码是否工作。您应该使用android.util.Log类中的方法来完成日志记录。

最后,您最初致电settings.edit()是多余的。