我的问题:当我想保存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();
}
我在这里做错了什么? 希望你能帮帮我
答案 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”
如果你告诉我们你真正要做的事情会有所帮助。