添加值后增加共享首选项键
Increment shared preference key after adding value
在我的应用中,用户可以为多人添加姓名和年龄。很可能只有 2 或 3 个左右。我想将它们存储在共享首选项中。我设置了一个计数器来跟踪存储了多少人以及管理哪个键对应哪个值。我接受了 edittext 输入并将其放入一个字符串中,然后像这样将其放入共享首选项中,添加到计数器上所以我知道那是第一个人并且会使用 "name1".[=12= 访问该人]
//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".
然后我去尝试在另一个 activity 中访问它...
SharedPreferences sharedPreferences = getSharedPreferences("registerData", Context.MODE_PRIVATE);
String name = sharedPreferences.getString("Name"+count,"");
String age = sharedPreferences.getString("Age"+count,"");
然后我会在添加下一个人之前更新计数器,将密钥更改为 "Name2" "Age2",依此类推。
每当我尝试将字符串设置为文本视图时,它们都显示为空白。这意味着访问密钥的字符串不同。 putString 必须获取 "Name1",因为即使我尝试访问 getString("Name",""),它仍然是空白的。有没有我做错或遗漏的事情。或者有更好的方法吗?谢谢
Is there something I'm doing wrong or missing. Or there is a better
way of doing this?
如果 SharedPreferences
键名是动态的,那么您应该使用 SharedPreferences.getAll() 其中 return 所选首选项中所有可用的键:
Map<String, ?> allKeys = sharedPreferences.getAll();
现在遍历 allKeys
以检查键名称并从 Map.Entry
获取与键相关的值,例如:
for (Map.Entry<String, ?> entry : allKeys.entrySet()) {
Log.v("TAG","Key Name :" entry.getKey());
Log.v("TAG","Key Value :" entry.getValue());
}
您必须在更改后在共享首选项编辑器上调用 apply()。
...
myEditor.apply();
然而,共享首选项并不意味着存储与内容相关的数据。考虑使用更合适的解决方案,例如数据库。
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.
在我的应用中,用户可以为多人添加姓名和年龄。很可能只有 2 或 3 个左右。我想将它们存储在共享首选项中。我设置了一个计数器来跟踪存储了多少人以及管理哪个键对应哪个值。我接受了 edittext 输入并将其放入一个字符串中,然后像这样将其放入共享首选项中,添加到计数器上所以我知道那是第一个人并且会使用 "name1".[=12= 访问该人]
//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".
然后我去尝试在另一个 activity 中访问它...
SharedPreferences sharedPreferences = getSharedPreferences("registerData", Context.MODE_PRIVATE);
String name = sharedPreferences.getString("Name"+count,"");
String age = sharedPreferences.getString("Age"+count,"");
然后我会在添加下一个人之前更新计数器,将密钥更改为 "Name2" "Age2",依此类推。
每当我尝试将字符串设置为文本视图时,它们都显示为空白。这意味着访问密钥的字符串不同。 putString 必须获取 "Name1",因为即使我尝试访问 getString("Name",""),它仍然是空白的。有没有我做错或遗漏的事情。或者有更好的方法吗?谢谢
Is there something I'm doing wrong or missing. Or there is a better way of doing this?
如果 SharedPreferences
键名是动态的,那么您应该使用 SharedPreferences.getAll() 其中 return 所选首选项中所有可用的键:
Map<String, ?> allKeys = sharedPreferences.getAll();
现在遍历 allKeys
以检查键名称并从 Map.Entry
获取与键相关的值,例如:
for (Map.Entry<String, ?> entry : allKeys.entrySet()) {
Log.v("TAG","Key Name :" entry.getKey());
Log.v("TAG","Key Value :" entry.getValue());
}
您必须在更改后在共享首选项编辑器上调用 apply()。
...
myEditor.apply();
然而,共享首选项并不意味着存储与内容相关的数据。考虑使用更合适的解决方案,例如数据库。
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.