android - 将用户输入保存到 SharedPreferences 并将值设置为 EdiTtext

标签 android sharedpreferences android-sharedpreferences

我想在单击按钮时将用户输入保存到 SharedPreferences,这样当用户再次启动 Activity 时,用户输入将设置为 EditText 和 TextView。我已经创建了一个 sharedPreferences 文件,我在之前的 Activity 中保存了一些文本。 我想用我创建的这个新 Activity 的其他详细信息更新 SharedPreferences 文件。

这是创建和保存到 SharedPreferences 的代码

private SharedPreferences prefs;
public static final String PREF_FILE_NAME = "AuthUser";

prefs = this.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
txtDate = (TextView) findViewById(R.id.txtDate);

    addIdButton = (Button) findViewById(R.id.btnAddId);
    addIdButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            expiryDate = txtDate.getText().toString();
            edtIdNumber = (EditText) findViewById(R.id.edtIdNumber);
            idNumber = edtIdNumber.getText().toString();
            SharedPreferences.Editor editor = prefs.edit();
            editor.putInt("idType", idType);
            editor.putString("idNumber", idNumber);
            editor.putString("expiryDate", expiryDate);
            editor.apply();
        }
    });

这是我的代码,用于将共享首选项的值设置为 EditText 和 TextView

@Override
public void onStart(){
    super.onStart();
    File f = new File(PREF_FILE_NAME);
    if (f.exists()){
        idType = prefs.getInt("idType", 0);
        idNumber = prefs.getString("idNumber", "");
        expiryDate = prefs.getString("expiryDate", "");

        edtIdNumber = (EditText) findViewById(R.id.edtIdNumber);
        txtDate = (TextView) findViewById(R.id.txtDate);
        txtDate.setText(expiryDate);
        edtIdNumber.setText(idNumber);
        edtIdNumber.setText(idNumber);
        txtDate.setText(expiryDate);

    }
}

最佳答案

File f = new File(PREF_FILE_NAME); 只有首选项的名称,所以 f.exists() 将始终返回 false

解决方案:删除

File f = new File(PREF_FILE_NAME);
if (f.exists()){

因为如果您没有任何值,那么只需使用默认值

@Override
public void onStart(){
    super.onStart();
    //File f = new File(PREF_FILE_NAME); // not a right path
    //if (f.exists()){ // false
        idType = prefs.getInt("idType", 0);
        idNumber = prefs.getString("idNumber", "");
        expiryDate = prefs.getString("expiryDate", "");

        edtIdNumber = (EditText) findViewById(R.id.edtIdNumber);
        txtDate = (TextView) findViewById(R.id.txtDate);
        txtDate.setText(expiryDate);
        edtIdNumber.setText(idNumber);
        edtIdNumber.setText(idNumber);
        txtDate.setText(expiryDate);

    //}
}

或者您可以使用 contains

关于android - 将用户输入保存到 SharedPreferences 并将值设置为 EdiTtext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45931720/

相关文章:

java - 从共享首选项中写入和读取无法正常工作

Android:如何在首选项屏幕中使用按钮

android - 监听 MainActivity 中的 SharedPreferences 更改

android - com.google.gson.ExclusionStrategy 类型定义了多次

安卓数据绑定(bind) : conditional formatting to set layout_weight

android - 如何为 NavigationDrawerActivity fragment 中的按钮设置 SetOnClickListener?在 Kotlin

Android:使用 SharedPreferences 更改特定 Activity 的背景颜色

android - 无法立即从共享首选项中获取值(value)

android - SharedPreferences 值检索如何工作 "under the hood"

Java 真正的全局变量(Android 版 Eclipse)