共享首选项未保存我的数据

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));}

  }