首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓: SharedPreferences问题(多个SharedPreferences)

安卓: SharedPreferences问题(多个SharedPreferences)
EN

Stack Overflow用户
提问于 2013-02-20 10:19:32
回答 1查看 2.1K关注 0票数 0

我有多个SharedPreferences,每个都存储一个int值。我以前已经成功地创建了多个SharedPreferences,但这次我尝试了一种略有不同的方法。我只保留最高的5个值。我从它的SharedPreference中获取每个值,然后将这5个值加上我想要在ArrayList中与其他值进行比较的当前值。我对它调用反向排序方法,然后删除最后一个值(因为它是额外的)。然后,我将每个索引放入SharedPreferences的编辑器中。这就是我所拥有的:

代码语言:javascript
复制
prefs1 = this.getSharedPreferences("key1", Context.MODE_PRIVATE);
int value1 = prefs1.getInt("number1", 0);

prefs2 = this.getSharedPreferences("key2", Context.MODE_PRIVATE);
int value2 = prefs2.getInt("number2", 0);

prefs3 = this.getSharedPreferences("key3", Context.MODE_PRIVATE);
int value3 = prefs3.getInt("number3", 0);

prefs4 = this.getSharedPreferences("key4", Context.MODE_PRIVATE);
int value4 = prefs4.getInt("number4", 0);

prefs5 = this.getSharedPreferences("key5", Context.MODE_PRIVATE);
int value5 = prefs5.getInt("number5", 0);

ArrayList<Integer> numList = new ArrayList<Integer>();
Collections.addAll(numList, value0, value1, value2, value3, value4, value5);
Collections.sort(numList, Collections.reverseOrder());
numList.remove(numList.size()-1);
value1 = numList.get(0);
value2 = numList.get(1);
value3 = numList.get(2);
value4 = numList.get(3);
value5 = numList.get(4);

Editor editor = prefs1.edit();
editor.putInt("number1", value1);
editor.commit();

editor = prefs2.edit();
editor.putInt("number2", value2);
editor.commit();

editor = prefs3.edit();
editor.putInt("number3", value3);
editor.commit();

editor = prefs4.edit();
editor.putInt("number4", value4);
editor.commit();

editor = prefs5.edit();
editor.putInt("number5", value5);
editor.commit();

我遇到的问题是,我的其他活动中的每个值都显示为0,即使在value0执行完之后也是正的。

我这样做有什么问题吗?(如果不是,那么一定是当我在另一个活动中获得这些值时,但我几乎可以肯定我是正确的。)

编辑*

也许是在检索中,这里是从检索活动中:

代码语言:javascript
复制
prefs1 = this.getSharedPreferences("key1", Context.MODE_PRIVATE);
num1 = prefs1.getInt("number1", 0); //0 is the default value
tv1 = (TextView) findViewById(R.id.val1);
tv1.setText(String.valueOf(num1));

prefs2 = this.getSharedPreferences("key2", Context.MODE_PRIVATE);
num2 = prefs2.getInt("number2", 0); //0 is the default value
tv2 = (TextView) findViewById(R.id.val2);
tv2.setText(String.valueOf(num2));

prefs3 = this.getSharedPreferences("key3", Context.MODE_PRIVATE);
num3 = prefs3.getInt("number3", 0); //0 is the default value
tv3 = (TextView) findViewById(R.id.val3);
tv3.setText(String.valueOf(num3));

prefs4 = this.getSharedPreferences("key4", Context.MODE_PRIVATE);
num4 = prefs4.getInt("number4", 0); //0 is the default value
tv4 = (TextView) findViewById(R.id.val4);
tv4.setText(String.valueOf(num4));

prefs5 = this.getSharedPreferences("key5", Context.MODE_PRIVATE);
num5 = prefs5.getInt("number5", 0); //0 is the default value
tv5 = (TextView) findViewById(R.id.val5);
tv5.setText(String.valueOf(num5));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-20 10:32:47

你可以把SharedPreferences想象成一个巨大的地图来存储你所有的东西,但是除非你正在做一些新奇的事情,否则你应该从同一个巨大的地图(即相同的SharedPreferences)中存储和检索数据。您要做的是创建命名的共享首选项。我建议您只使用默认设置。如果您想了解更多关于这意味着什么的信息,请使用check out this question.

因此,在您的示例中,如果要存储5个值,则可以在同一个SharedPreferences中存储,只需提供不同的键,如下所示:

代码语言:javascript
复制
SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());  
SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit();

mSharedPreferencesEditor.putInt("numberX", numberX);
mSharedPreferencesEditor.putInt("numberY", numberY);
mSharedPreferencesEditor.commit()

mSharedPreferences.getInt("numberX", numberX);
mSharedPreferences.getInt("numberY", numberY);

您可以轻松地使用不同的密钥将getput放入同一个sharedPrefs。你的代码将变成:

代码语言:javascript
复制
SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());  
SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit();

int value1 = mSharedPreferences.getInt("number1", 0);
int value2 = mSharedPreferences.getInt("number2", 0);
int value3 = mSharedPreferences.getInt("number3", 0);
int value4 = mSharedPreferences.getInt("number4", 0);
int value5 = mSharedPreferences.getInt("number5", 0);

...

mSharedPreferencesEditor.putInt("number1", value1);
mSharedPreferencesEditor.putInt("number2", value2);
mSharedPreferencesEditor.putInt("number3", value3);
mSharedPreferencesEditor.putInt("number4", value4);
mSharedPreferencesEditor.putInt("number5", value5);
mSharedPreferencesEditor.commit();

关于所有值为0的问题可能会有所不同。我完全期望您对getInt的所有调用都为0,因为您是,而不是,在sharedPrefs中存储除0以外的任何内容。看起来您只是在添加零和放置零。我不确定您在这里要做什么,但在调用此函数之前的某个时刻,通过在sharedPrefs对象上调用mSharedPreferencesEditor.putInt(number);来将数字1-5赋给除0以外的值,肯定会有所帮助:

代码语言:javascript
复制
SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());  
SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit();

//for example, for the key "number5"
mSharedPreferencesEditor.putInt("number5", value5);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14971250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档