将用户输入保存到 SharedPreferences 并将值设置为 EdiTtext
Save user input to SharedPrefernces and set Value to EdiText
我想在单击按钮时将用户输入保存到 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()
将永远 returns 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 中 Activity 的 onCreate() 和 onStart() 方法之间的区别,遵循以下 url: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();
}
只需从 Onstart()
中删除 if (f.exists())
条件,因为 File f = new File(PREF_FILE_NAME);
仅具有首选项的名称,因此 f.exists()
将始终 returns 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);
}
我想在单击按钮时将用户输入保存到 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()
将永远 returns 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 中 Activity 的 onCreate() 和 onStart() 方法之间的区别,遵循以下 url: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();
}
只需从 Onstart()
中删除 if (f.exists())
条件,因为 File f = new File(PREF_FILE_NAME);
仅具有首选项的名称,因此 f.exists()
将始终 returns 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);
}