将用户输入保存到SharedPrefernces并将Value设置为EdiText
我想将用户输入保存到SharedPreferences,当我单击按钮时,当用户再次启动活动时,用户输入设置为EditText和TextView。我已经创建了一个sharedPreferences文件,我在之前的活动中保存了一些文本。 我想用我创建的这个新活动的另一个细节更新SharedPreferences文件。将用户输入保存到SharedPrefernces并将Value设置为EdiText
这是一个用于创建和保存到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
解决方案:Rem奥雅纳
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()
因为File f = new File(PREF_FILE_NAME);
只是有偏好的名称中删除if (f.exists())
条件,使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);
}
在O中使用onStart()代码nCreate方法..因为你可以找到edittext后创建方法执行.... –
代码看起来不错。你面临的问题是什么?除了设置“edtIdNumber”的文本2次,这是一个复制粘贴错误。 –
@PCGALIANDROID问题是值未被保存到sharedPreference文件 –