SharedPreferences不保存

时间:2012-07-27 19:10:04

标签: android sharedpreferences

我的问题:当我想保存sharedPreference并重新启动应用程序时,它不会加载正确的值。 我的代码:

int punkteint = 0;
TextView test1;
String points;
private static String SHARED_PREF_ID = "0";

public void onCreate(Bundle savedInstanceState) {
    test1 = (TextView) findViewById(R.id.test1);
    SharedPreferences load = getSharedPreferences(SHARED_PREF_ID, 0);
    points = load.getString("punkte", "0");
    points = SHARED_PREF_ID;
    test1.setText(points);
    mehrPunkte();
    }


public void mehrPunkte() {

    punkteint++;

    SHARED_PREF_ID = Integer.toString(punkteint);
    SharedPreferences load = getSharedPreferences(SHARED_PREF_ID, MODE_PRIVATE);
    points = load.getString("punkte", "0");
    points = SHARED_PREF_ID;
    test1.setText(points);

    SharedPreferences save = getSharedPreferences(SHARED_PREF_ID, MODE_PRIVATE);
    save.edit().putString("punkte", SHARED_PREF_ID).commit();
}

我在这里做错了什么? 希望你能帮帮我

4 个答案:

答案 0 :(得分:1)

这一行:

save.edit().putString("punkte", SHARED_PREF_ID).commit();

将SHARED_PREF_ID保存为punkte的值。所以,它总是为0.也许你的意思是:

save.edit().putString("punkte", String.valueOf(punkteint)).commit();

或者也许:

save.edit().putString("punkte", String.valueOf(points)).commit();

我不确定你想要实际保存的是什么。

哦,如果您从共享的首字母获取它,那么您将立即重置该值:

points = load.getString("punkte", "0");
points = SHARED_PREF_ID;

不要做第二行。

答案 1 :(得分:1)

不确定你在这里要做什么:

points = load.getString("punkte", "0");
points = SHARED_PREF_ID;
test1.setText(points);

基本上,您告诉它要做的是“将punkte的值加载到points,然后将SHARED_PREF_ID加载到points”。这意味着此处points始终等于SHARED_PREF_ID。删除说“points = SHARED_PREF_ID;”的行,您可能会取得更大的成功。

此外,我不会更改SHARED_PREF_ID的值。将其设为final String并为其提供一些唯一值(例如"punkte_prefs")。

最后,我会看一下the documentation哪些很好的示例,以及@ Kaediil的答案(因为他抓到了我错过的东西......)。

答案 2 :(得分:0)

不确定。你的工作应该有效,但我会用它来代替

SharedPreferences.Editor prefEditor = save.edit();
prefEditor.putString("blah", blah);
PredEditor.commit()

保存onPause并加载onResume。如果数据意图改变活动,可能会有所帮助。

答案 3 :(得分:0)

我想你们已经把自己扭曲了。

  private static String SHARED_PREF_ID = "0";
  ...
  SharedPreferences load = getSharedPreferences(SHARED_PREF_ID, 0);
  points = load.getString("punkte", "0");
  points = SHARED_PREF_ID;

这些行从名为“0”的文件中读取共享首选项。那是你想要的吗?这对于文件来说是一个非常有用的名称。下一行将名为“punkte”的字符串值读入变量“points”,然后立即丢弃该值并将其替换为“0”。

punkteint++;
SHARED_PREF_ID = Integer.toString(punkteint);
SharedPreferences load = getSharedPreferences(SHARED_PREF_ID, MODE_PRIVATE);

这些行增加一个计数器,用它来生成一个全新的文件名,并从该文件中加载一组全新的首选项。再次,您从这些首选项加载“点”并立即丢弃该值,将其设置为此新文件名。

SharedPreferences save = getSharedPreferences(SHARED_PREF_ID, MODE_PRIVATE);
save.edit().putString("punkte", SHARED_PREF_ID).commit();

这些行再次从该新文件重新加载首选项,并将文件名写入“punkte”值。

看起来你故意生成一系列首选项文件,每个文件在“punkte”值下包含自己的名称。

当您下次运行应用程序时,您将返回从文件“0”读取首选项,获得第一次获得的相同值:“0”

如果你告诉我们你真正要做的事情会有所帮助。