添加值后增加共享首选项键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加值后增加共享首选项键相关的知识,希望对你有一定的参考价值。

在我的应用中,用户可以为多人添加姓名和年龄。最有可能的是它只会在2或3左右。我想将它们存储在共享首选项中。我设置了一个计数器来跟踪存储了多少人以及管理哪个键与哪个值相关。我接受了edittext输入并将其放入一个字符串然后将其放入共享首选项中,在计数器上添加,因此我知道这是第一个人并且将使用“name1”访问该人。

//this is in the class
public int count = 1;

//this is in the main
SharedPreferences sharedPreferences = getSharedPreferences("registerData", Context.MODE_PRIVATE);
            SharedPreferences.Editor myEditor = sharedPreferences.edit();

            myEditor.putString("Name"+count, name);
            myEditor.putString("Age"+count, age);

除非我弄错了,否则应该将字符串“name”放入“Name1”中。

然后我去尝试在另一个活动中访问它...

SharedPreferences sharedPreferences = getSharedPreferences("registerData", Context.MODE_PRIVATE);
    String name = sharedPreferences.getString("Name"+count,"");
    String age = sharedPreferences.getString("Age"+count,"");

然后我会在添加下一个人之前更新计数器,将密钥更改为“Name2”“Age2”,依此类推。

每当我尝试将字符串设置为textview时,它们都显示为空白。这意味着它不是相同的String来访问密钥。 putString必须获取“Name1”,因为即使我尝试访问getString(“Name”,“”),它仍然是空白的。有什么我做错了或错过了。或者有更好的方法吗?谢谢。

答案
        SharedPreferences sharedPreferences = getSharedPreferences("registerData",Context.MODE_PRIVATE);
        SharedPreferences.Editor myEditor = sharedPreferences.edit();

        myEditor.putString("Name"+count, name);
        myEditor.putString("Age"+count, age);
        myEditor.apply();//returns nothing,don't forgot to commit changes

你也可以用

      myEditor.commit() //returns true if the save works, false otherwise.
另一答案

有什么我做错了或错过了。或者有更好的方法吗?

如果SharedPreferences键名是动态的,那么你应该使用SharedPreferences.getAll()返回所选择的首选项中可用的所有键:

Map<String, ?> allKeys = sharedPreferences.getAll();

现在迭代allKeys来检查关键名称并从Map.Entry获取与key相关的值,如:

for (Map.Entry<String, ?> entry : allKeys.entrySet()) {
    Log.v("TAG","Key Name :" entry.getKey());
    Log.v("TAG","Key Value :" entry.getValue());
} 
另一答案

您必须在进行更改后在共享首选项编辑器上调用apply()

...
myEditor.apply();

但是,共享首选项并不意味着存储与内容相关的数据。考虑使用更合适的解决方案,如数据库。

以上是关于添加值后增加共享首选项键的主要内容,如果未能解决你的问题,请参考以下文章

如何访问 SherlockFragment 中的共享首选项

在 android 首选项片段中使用 startService()

当使用tablayout切换片段时,所有片段都会重新创建

在颤动中多次将 json 数据添加到共享首选项

如何隐藏片段中首选项之间的分隔符

使用片段在可Swipable选项卡中加载首选项设置