2017-01-13 52 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的多個實例,除非您正在加載不同的配置。

相關問題