2017-08-29 38 views
1

我想将用户输入保存到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); 

    } 
} 
+0

在O中使用onStart()代码nCreate方法..因为你可以找到edittext后创建方法执行.... –

+1

代码看起来不错。你面临的问题是什么?除了设置“edtIdNumber”的文本2次,这是一个复制粘贴错误。 –

+0

@PCGALIANDROID问题是值未被保存到sharedPreference文件 –

回答

1

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

+0

你的答案帮了我。谢谢 –

+0

我很高兴我能帮忙,快乐编码 –

1

为了更好地实现您的工作:的 首先尝试了解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(); 
     } 
+0

这个不会有什么影响 –

0

刚刚从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); 


} 
相关问题