SharedPreferences不起作用

时间:2013-04-11 11:49:32

标签: java android eclipse sharedpreferences

我使用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 ...没有崩溃或任何东西......它只是显示默认值...

3 个答案:

答案 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,所以要小心)

请参阅the documentation

问题是Rajesh CP所说的。 您需要创建一个编辑器指针,然后应用:

Editor editor = prefs.edit();
editor.putString("username", username);
editor.putString("password", password);
editor.apply();

否则,每次创建编辑器的新实例并应用更改时,被指示应用更改的编辑器都没有任何更改