嘿guyz检查我在这里缺少的是因为我无法从共享首选项中获取所有数据。 我正在制作这样一个任务列表应用程序,其中我使用某个键保存我的数据(表示mytask)并将其存储在共享的Preferences中,并为总计数增加一个变量。
检查我的代码(每当我点击addTask按钮时,执行以下代码)。
private void saveToSharedPreference(){
sharedPre = getSharedPreferences("todoPref",Context.MODE_PRIVATE);
editor = sharedPre.edit();
String myKey = "key"+a;
String myValue = et.getText().toString();
editor.putString(myKey,myValue);
// editor.putInt("totalTask", a);
editor.commit();
}
现在当我关闭应用程序并再次打开它时,会执行以下代码以便从共享首选项加载数据。
private void loadData(){
sharedPre = getSharedPreferences("todoPref",Context.MODE_PRIVATE);
int p = 1;
String myKey = "key"+p;
while(sharedPre.getString(myKey,"") != null){
Toast.makeText(this, sharedPre.getString(myKey,""),Toast.LENGTH_SHORT).show();
}
}
但问题是它总是在所有索引上返回null。我不知道为什么我会收到这个错误。请帮我 提前致谢 Sarosh Madara
答案 0 :(得分:1)
这样做 -
1)像这样保存共享偏好 -
private void saveToSharedPreference(){
sharedPre = getSharedPreferences("todoPref",Context.MODE_PRIVATE);
editor = sharedPre.edit();
String myKey = "key"; // removed +a
String myValue = et.getText().toString();
editor.putString(myKey,myValue);
// editor.putInt("totalTask", a);
editor.commit();
}
2)像这样加载 -
private void loadData() {
sharedPre = getSharedPreferences("todoPref",Context.MODE_PRIVATE);
int p = 1;
String myKey = "key"; // removed "+p"
String value = sharedPre.getString(myKey, "");
}
答案 1 :(得分:1)
加载所有保存的值只需使用以下代码:
private void loadData() {
SharedPreferences sharedPre = getSharedPreferences("todoPref",android.content.Context.MODE_PRIVATE);
Map<String,?> keys = sharedPre.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
if (entry.getValue().toString().length() > 0) {
Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());
}
}
}
我发现它here但添加了一个检查以忽略空值。
将值保存到共享首选项我建议使用该键的当前时间实例。无需保存任何整数键值:
private void saveToSharedPreference(String myValue){
SharedPreferences sharedPre = getSharedPreferences("todoPref",android.content.Context.MODE_PRIVATE);
Editor editor = sharedPre.edit();
String key = String.valueOf(Calendar.getInstance().getTimeInMillis());
editor.putString(key,myValue);
editor.commit();
}
因此,无论何时您想要向共享首选项添加值,请使用:
saveToSharedPreference("myValue");
并加载它们全部使用:
loadData();
地图界面
Map是将键映射到值的对象。地图不能包含重复键:每个键最多可映射一个值。 read more...
SharedPreferences:Class Overview
答案 2 :(得分:0)
请勿在while循环中与!= null进行比较。使用下面的代码,看看问题是否解决: -
private void loadData(){
sharedPre = getSharedPreferences("todoPref",Context.MODE_PRIVATE);
int p = 1;
String myKey = "key"+p;
String value = sharedPre.getString(myKey,"");
if(!value.equalsIgnoreCase("")){
Toast.makeText(this, sharedPre.getString(myKey,""),Toast.LENGTH_SHORT).show();
}
}