0

我的问题:当我想保存 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

4 回答 4

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;

不要做第二行。

于 2012-07-27T19:15:55.307 回答
1

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

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

基本上,您告诉它要做的是“将punkte值加载到points,然后加载SHARED_PREF_IDpoints”。这意味着points将永远等于SHARED_PREF_ID这里。删除上面写着“ points = SHARED_PREF_ID;”的行,你可能会取得更大的成功。

此外,我不会改变SHARED_PREF_ID's 的价值。使它成为 afinal String并赋予它一些独特的价值(如"punkte_prefs")。

最后,我会看一下包含很好示例的文档,以及@Kaediil 的回答(因为他抓住了我错过的东西......)。

于 2012-07-27T19:17:19.127 回答
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”

如果您告诉我们您实际上想要做什么,那将会有所帮助。

于 2012-07-28T02:05:35.047 回答
0

没有把握。你应该做什么,但我会用这个代替

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

在 onPause 中保存并在 onResume 中加载。如果数据是为了改变活动,可能会有所帮助。

于 2012-07-27T19:15:05.240 回答