为什么无法将INT保存到SharedPreferences?

5

我有一个奇怪的问题,之前从没有遇到过。当我尝试将int值保存到我的SharedPreference中,然后在其他Activity中恢复时,无论我保存了什么值(例如1),该值总是为0。

private String Number;
private String Profile;

然后在第一个Activity中将值(在本例中为“1”)保存到SharedPreferences中:

SharedPreferences a = FirstActivity.this.getSharedPreferences("a", MODE_PRIVATE);
SharedPreferences.Editor prefsEditorProfiles = a.edit();
prefsEditorProfiles.putInt(Profile, 1);
prefsEditorProfiles.putInt(Number, 1);
prefsEditorProfiles.commit();

然后在其他活动中恢复SharedPreferences:

SharedPreferences a = SecondActivity.this.getSharedPreferences("a", MODE_PRIVATE);
int ab = a.getInt(Number, 0);

应用程序显示0而不是1。我的其他SharedPreferences运行良好。我不知道问题出在哪里。


我假设你在某处实例化了“Number”和“Profile”键,并且这些键在活动之间相匹配? - harism
4个回答

5

我会检查您所声明的 Number 和 Profile 变量的值... 您正在使用它们的值作为键,因此如果它们具有冲突的名称,即使代码看起来正确,也可能覆盖一个设置而另一个设置被忽略。

我建议将这个:

private String Number;
private String Profile;

替换为这个:

private final String NUMBER = "Number";
private final String PROFILE = "Profile";

然后在设置和获取首选项值时使用这些常量。


是的,你说得对,它有效了,谢谢。但我不知道为什么之前使用时没有这个问题。也许因为我只在SharedPreferences中有一个字符串? - Adam

1

我一直在尝试像你一样使用putInt,但总是出错。

prefsEditorProfiles.putInt(Number, 1);

通过将a.putInt更改为a.putString并使用a.getString检索它,我能够获得正确的值。所以,我想putIntgetInt应该有问题。无论如何,为了使应用程序继续正常运行,请尝试这样做以获得正确的值。

1
你是否曾经为“Number”和“Profile”设置过值? 如果没有,那么这就是你的问题 - 这些字符串为空。

是的,在第一个Activity中,当我按下按钮时,应该将值保存到SharedPreferences中,如您在问题中所看到的(然后在第一个Activity中将值(在本例中为“1”)保存到SharedPreferences中),但实际上并没有,因为在第二个Activity中,当我用Toast显示它时,由于这个原因(int ab = a.getInt(Number, 0);),值始终为0,如果我将其更改为(int ab = a.getInt(Number, 1);),则值将始终为1。 - Adam
我的意思是,在你的代码中是否有设置Number="Number"的地方 - 你在代码示例中列出的变量被初始化了,但没有被设置。我不是在谈论设置SharedSettings.putInt()。我是在谈论你用作键值的变量。它们被设置了吗? - Plastic Sturgeon

1

Please try to use

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());

与其使用

,不如使用


SharedPreferences prefs = getActivity().getSharedPreferences ("PREFS_KEY", 0);

在共享偏好设置中存储int类型时

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接