【问题标题】:Save user input to SharedPrefernces and set Value to EdiText将用户输入保存到 SharedPreferences 并将 Value 设置为 EditTtext
【发布时间】:2017-08-29 06:03:26
【问题描述】:

我想在单击按钮时将用户输入保存到 SharedPreferences,以便当用户再次启动活动时,用户输入设置为 EditText 和 TextView。我已经创建了一个 sharedPreferences 文件,我在之前的活动中保存了一些文本。 我想用我创建的这个新活动的另一个详细信息更新 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);

    }
}

【问题讨论】:

  • 在 OnCreate 方法中使用 onStart() 代码.. 因为你可以在 oncreate 方法执行后找到 edittext....
  • 代码看起来不错。你面临的问题是什么。除了将文本设置为edtIdNumber 2 次之外,这是一个复制粘贴错误。
  • @PCGALIANDROID 问题是值没有保存到 sharedPreference 文件中
  • 我认为您在写入 SharedPreferences 时缺少“提交”。尝试添加 editor.commit();看看会发生什么

标签: android sharedpreferences android-sharedpreferences


【解决方案1】:

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

【讨论】:

  • 您的回答帮助了我。谢谢
  • 很高兴能帮上忙,编码愉快
【解决方案2】:

要完成您的工作: 首先尝试了解 android 中 Activity 的 onCreate() 和 onStart() 方法之间的区别,遵循以下网址:https://developer.android.com/guide/components/activities/activity-lifecycle.html -:使用 onCreate() 方法而不是 onStart() 来设置 ui 变量;

其次更改您的代码,例如:

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.commit();
        }

【讨论】:

  • 这不会有任何影响
【解决方案3】:

只需从Onstart() 中删除if (f.exists()) 条件,因为File f = new File(PREF_FILE_NAME); 只是具有首选项的名称,因此f.exists() 将始终返回false

如下代码

     @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);
        txtDate.setText(expiryDate);


}

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2011-10-26
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多