尝试从共享首选项中检索数据时我遗漏了什么
What I missing when tried to retrieve data from Shared Preferences
嘿,伙计,看看我在这里遗漏了什么,因为我无法从共享首选项中获取我的所有数据。
我正在制作这样一个任务列表应用程序,我在其中使用某个键保存我的数据(意味着 mytask)并将其存储在共享首选项中并增加一个变量以获取总计数。
检查我的代码(每当我点击 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。我不知道为什么会收到此错误。请帮我
提前致谢
萨罗什马达拉
这样做 -
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, "");
}
不要在 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();
}
}
加载所有保存的值只需使用以下代码:
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...
共享首选项:Class Overview
嘿,伙计,看看我在这里遗漏了什么,因为我无法从共享首选项中获取我的所有数据。 我正在制作这样一个任务列表应用程序,我在其中使用某个键保存我的数据(意味着 mytask)并将其存储在共享首选项中并增加一个变量以获取总计数。
检查我的代码(每当我点击 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。我不知道为什么会收到此错误。请帮我 提前致谢 萨罗什马达拉
这样做 -
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, "");
}
不要在 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();
}
}
加载所有保存的值只需使用以下代码:
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...
共享首选项:Class Overview