2017-01-13 25 views
-1

我的应用程序有2个editText。SharedPreferences不适用于EditText

我想将2个文本从EditText保存到sharedpreferences然后加载它,但是当我尝试在保存后加载它时 - app在每个editText中读入与最后一个EditText相同的文本。

private static final String PREFERENCES_NAME = "myPreferences"; 
    private static final String PREFERENCES_NAME2 = "myPreferences"; 

    private SharedPreferences preferences; 
    private SharedPreferences preferences2; 

     preferences = getSharedPreferences(PREFERENCES_NAME, Activity.MODE_PRIVATE); 
     preferences2 = getSharedPreferences(PREFERENCES_NAME2, Activity.MODE_PRIVATE); 


    private void save() { 
     SharedPreferences.Editor preferencesEditor = preferences.edit(); 
     String eTextData = eText.getText().toString(); 
     preferencesEditor.putString(PREFERENCES_TEXT_FIELD, eTextData); 
     preferencesEditor.commit(); 

     SharedPreferences.Editor preferencesEditor2 = preferences2.edit(); 
     String eTextData2 = eText2.getText().toString(); 
     preferencesEditor2.putString(PREFERENCES_TEXT_FIELD2, eTextData1); 
     preferencesEditor2.commit(); 
    } 



    private void read() { 
     String textFromPreferences = preferences.getString(PREFERENCES_TEXT_FIELD, ""); 
     eText.setText(textFromPreferences); 

     String textFromPreferences2 = preferences2.getString(PREFERENCES_TEXT_FIELD2, ""); 
     eText2.setText(textFromPreferences2); 
    } 

我的代码有什么问题?

+1

请更改PREFERENCES_NAME2变量的值,因为它与PREFERENCES_NAME的值相同。 –

+0

为什么你使用两个首选对象 –

回答

1

您的字符串值相同:

private static final String PREFERENCES_NAME = "myPreferences"; 
private static final String PREFERENCES_NAME2 = "myPreferences"; 

所以putString将覆盖海誓山盟。 另外,您只能为这两个字符串使用SharedPreferences的1个实例。

+0

private static final String PREFERENCES_TEXT_FIELD =“textField”; private static final String PREFERENCES_TEXT_FIELD2 =“textField”; --->我知道这里也需要改变? – Rambo

+0

@Rambo是的,你需要改变他们,有唯一的钥匙。假设有两个名字为“Bob”的人,如果你打电话给Bob,谁应该回应? –

0

您正在使用相同的首选项文件名"myPreferences"。另外,不需要使用两种不同的偏好,一种就足够了。

private static final String PREFERENCES_NAME = "myPreferences"; 

private SharedPreferences preferences; 

preferences = getSharedPreferences(PREFERENCES_NAME, Activity.MODE_PRIVATE); 


private void save() { 
    SharedPreferences.Editor preferencesEditor = preferences.edit(); 
    String eTextData = eText.getText().toString(); 
    String eTextData2 = eText2.getText().toString(); 

    //Again, PREFERENCES_TEXT_FIELD and PREFERENCES_TEXT_FIELD2 should be //different 

    preferencesEditor.putString(PREFERENCES_TEXT_FIELD, eTextData); 
    preferencesEditor.putString(PREFERENCES_TEXT_FIELD2, eTextData2); 
    preferencesEditor.commit(); 
} 



private void read() { 
    String textFromPreferences = preferences.getString(PREFERENCES_TEXT_FIELD, ""); 
    eText.setText(textFromPreferences); 

    String textFromPreferences2 = preferences.getString(PREFERENCES_TEXT_FIELD2, ""); 
    eText2.setText(textFromPreferences2); 
} 
+0

我会做的,谢谢,我有足够的声望给点 – Rambo

+0

@Rambo欢迎您。 “我有足够的声望给点意味着什么”? –

+0

但在你的方式,我需要声明2x私有静态最终字符串PREFERENCES_TEXT_FIELD =“textField”; ? – Rambo

0

问题可能是您的PREFERENCES_TEXT_FIELD2PREFERENCES_TEXT_FIELD是相等的。

另外,通常您不需要SharedPreferences的多个实例,除非您正在加载不同的配置。

相关问题