共享首选项未保存我的数据
Shared Preference isn't saving my data
我想知道为什么我的 SharedPreference
方法没有保存我的数据。
这是我的代码
保存函数(我每次执行过程后都会调用这个函数):
public void save(double tamt) {
SharedPreferences saveamount = getSharedPreferences("TotalAmount" , MODE_PRIVATE);
SharedPreferences.Editor editor = saveamount.edit();
editor.clear();
editor.putString("LastAmount",String.valueOf(tamt));
editor.apply();
}
我在 onCreate()
方法中调用阅读方法:
public void loadAmt() {
SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,0);
String amt = loadamount.getString("TotalAmount","");
if (amt.matches("")){
return;
}
else {
total = Double.parseDouble(loadamount.getString("TotalAmount" ,"0"));
et.setText(String.valueOf(total));
}
}
是保存方式还是读取方式的问题?
每次退出我的程序并重新打开后,数据都没有显示。
因为你省了
editor.putString("LastAmount",String.valueOf(tamt));
但是你找回了
String amt = loadamount.getString("TotalAmount","0");
它们是不同的键。
你必须检索
String amt = loadamount.getString("LastAmount","");
还有这个:
total = Double.parseDouble(loadamount.getString("TotalAmount" ,"0"));
et.setText(String.valueOf(total));}
应该改为
// USELESS, you already have the string in amt
//total = Double.parseDouble(loadamount.getString("TotalAmount" ,"0"));
et.setText(String.valueOf(amt));}
你的错误是 TotalAmount
是你的文件名,你试图获取一个带有键 TotalAmount
的字符串,当你用键 [=] 保存你的值时,这个字符串不存在13=]。所以只需修改加载方法
public void loadAmt() {
SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,0);
String amt = loadamount.getString("LastAmount","");
if (amt.matches("")){
return;
} else {
total = Double.parseDouble(loadamount.getString("LastAmount" ,"0"));
et.setText(String.valueOf(total));
}
}
在 loadAmt() 方法中,您的密钥无法获取偏好信息,请执行以下操作:
public void loadAmt()
{
SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,0);
String amt = loadamount.getString("LastAmount",""); //change here to LastAmount
if (amt.matches("")){
return;
}
else {
total = Double.parseDouble(loadamount.getString("LastAmount" ,"0")); //change here to LastAmount
et.setText(String.valueOf(total));}
}
您的代码如下:
public void save(double tamt) {
SharedPreferences saveamount = getSharedPreferences("TotalAmount" , Context.MODE_PRIVATE);
SharedPreferences.Editor editor = saveamount.edit();
editor.clear();
editor.putString("LastAmount",String.valueOf(tamt));
editor.commit();}
我在 OnCreate 函数中使用读取函数
public void loadAmt()
{
SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,Context.MODE_PRIVATE);
String amt = loadamount.getString("LastAmount","");
if (amt.matches("")){
return;
}else {
total = Double.parseDouble(loadamount.getString("LastAmount" ,"0"));
et.setText(String.valueOf(total));}
}
我想知道为什么我的 SharedPreference
方法没有保存我的数据。
这是我的代码
保存函数(我每次执行过程后都会调用这个函数):
public void save(double tamt) {
SharedPreferences saveamount = getSharedPreferences("TotalAmount" , MODE_PRIVATE);
SharedPreferences.Editor editor = saveamount.edit();
editor.clear();
editor.putString("LastAmount",String.valueOf(tamt));
editor.apply();
}
我在 onCreate()
方法中调用阅读方法:
public void loadAmt() {
SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,0);
String amt = loadamount.getString("TotalAmount","");
if (amt.matches("")){
return;
}
else {
total = Double.parseDouble(loadamount.getString("TotalAmount" ,"0"));
et.setText(String.valueOf(total));
}
}
是保存方式还是读取方式的问题?
每次退出我的程序并重新打开后,数据都没有显示。
因为你省了
editor.putString("LastAmount",String.valueOf(tamt));
但是你找回了
String amt = loadamount.getString("TotalAmount","0");
它们是不同的键。
你必须检索
String amt = loadamount.getString("LastAmount","");
还有这个:
total = Double.parseDouble(loadamount.getString("TotalAmount" ,"0"));
et.setText(String.valueOf(total));}
应该改为
// USELESS, you already have the string in amt
//total = Double.parseDouble(loadamount.getString("TotalAmount" ,"0"));
et.setText(String.valueOf(amt));}
你的错误是 TotalAmount
是你的文件名,你试图获取一个带有键 TotalAmount
的字符串,当你用键 [=] 保存你的值时,这个字符串不存在13=]。所以只需修改加载方法
public void loadAmt() {
SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,0);
String amt = loadamount.getString("LastAmount","");
if (amt.matches("")){
return;
} else {
total = Double.parseDouble(loadamount.getString("LastAmount" ,"0"));
et.setText(String.valueOf(total));
}
}
在 loadAmt() 方法中,您的密钥无法获取偏好信息,请执行以下操作:
public void loadAmt()
{
SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,0);
String amt = loadamount.getString("LastAmount",""); //change here to LastAmount
if (amt.matches("")){
return;
}
else {
total = Double.parseDouble(loadamount.getString("LastAmount" ,"0")); //change here to LastAmount
et.setText(String.valueOf(total));}
}
您的代码如下:
public void save(double tamt) {
SharedPreferences saveamount = getSharedPreferences("TotalAmount" , Context.MODE_PRIVATE);
SharedPreferences.Editor editor = saveamount.edit();
editor.clear();
editor.putString("LastAmount",String.valueOf(tamt));
editor.commit();}
我在 OnCreate 函数中使用读取函数
public void loadAmt()
{
SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,Context.MODE_PRIVATE);
String amt = loadamount.getString("LastAmount","");
if (amt.matches("")){
return;
}else {
total = Double.parseDouble(loadamount.getString("LastAmount" ,"0"));
et.setText(String.valueOf(total));}
}