我使用SharedPreferences时遇到的问题很少。我想保存并稍后在首选项中加载字符串。 我在onCreate方法中初始化我的prefs:
prefs = this.getSharedPreferences("com.example.android_test", Activity.MODE_PRIVATE);
我保存另一种方法:
public void saveUser()
{
prefs.edit().putString("username", username);
prefs.edit().putString("password", password);
prefs.edit().apply();
}
加载另一种方法:
public void loadUser()
{
username = prefs.getString("username", "default");
password = prefs.getString("password", "test");
}
这些是我的测试方法:
public void showUser(View v)
{
loadUser();
text.setText(username);
}
public void addUser(View v)
{
changeUser(eingabe.getText().toString(),"newpass");
}
public void changeUser(String user, String pass)
{
username = user;
password = pass;
saveUser();
}
用户名和密码是全局的,私有的字符串,eingabe是EditText,文本是TextView。 但是,当执行showUser()时,我只获得显示给TextView的defaultvalue,即使我使用带有不同用户名的saveUser ...没有崩溃或任何东西......它只是显示默认值...
答案 0 :(得分:8)
您忘了提交修改:
prefs.edit().putString("username", username).commit();
答案 1 :(得分:3)
prefs.edit().putString("username", username);
prefs.edit().putString("password", password);
每次edit
将返回不同的实例时更改此值,以便您的更改不会被提交。
Editor editor = prefs.edit();
editor.putString("username", username);
editor.putString("password", password);
editor.commit();
试试这个。
与commit()不同,后者将其首选项写入持久性 同步存储,apply()将其更改提交到内存中 SharedPreferences立即启动异步提交 磁盘,您不会收到任何故障通知。如果是其他编辑 这个SharedPreferences在apply()时执行常规commit() 仍然未完成,commit()将阻塞,直到所有异步提交为止 完成以及提交本身。
答案 2 :(得分:1)
好的,apply与commit 相同,它只是原子地写出首选项,使其线程安全。 (它需要API级别9,所以要小心)
问题是Rajesh CP所说的。 您需要创建一个编辑器指针,然后应用:
Editor editor = prefs.edit();
editor.putString("username", username);
editor.putString("password", password);
editor.apply();
否则,每次创建编辑器的新实例并应用更改时,被指示应用更改的编辑器都没有任何更改