2014-06-19 39 views
0

我試圖在一個鍵下爲Android中的共享偏好保存兩個值。我想這樣做的原因是,我可以檢查一個字符串的值,然後替換它。 例如,我想共享首選項(key1,StringA,StringB)。在我的程序中,我想檢查一個textView是否與StringA匹配,如果是,則將其替換爲StringB。有沒有辦法做到這一點與共享首選項?如果是這樣,我將如何實現在一個鍵下存儲兩根刺?如果不是,我能做到這一點的更好方法是什麼?謝謝你的幫助。SharedPreferences中的多個值

到目前爲止,我檢查TextView的價值,並通過這樣的共享偏好代替它...

if (sharedpreferences.contains(Name)) { 
     if (sharedpreferences.getString(Name, "").equals(stringname.getText())) { 
      name.setText(sharedpreferences.getString(Name, "")); 
      //I want to replace name(which is the textView) with StringB instead. 
     } 
     else { 
      name.setText("Didn't Match"); 
     } 
    } 

所以這就是爲什麼我要使用兩個值這種方式,用戶可自行更換特定他們希望TextView成爲另一個字符串。

+3

將兩個值都以逗號分隔。然後使用字符串操作來獲取值並執行你的邏輯。 –

+0

那麼只需在第一個逗號後加上另一個值呢?什麼樣的字符串操作?我會把它們放入一個數組還是..? – mtorres

+1

如果使用逗號分隔的字符串,請注意任何原始字符串是否包含逗號。你必須逃避/ unescape他們。 – matiash

回答

1

您不能這樣做,因爲如果您在任何地方使用相同的密鑰,它將覆蓋值。

但是,有一種替代方法可以將多個字符串值存儲在單個首選項中,每個值都以逗號分隔。然後,您可以使用convertStringToArray將其轉換爲字符串數組。

我不會建議你這樣做,因爲爲什麼你應該爲單個鍵存儲和操縱值編寫更多的代碼,而不是直接存儲不同鍵的值並直接與單獨值進行比較。

+0

請參閱上面在約瑟夫的答案中解釋爲什麼我需要這樣做的解釋。我認爲convertStringToArray可能會工作,但我將如何使用上面的代碼來實現? – mtorres

+0

@ user3124083沒問題。試着用上面提到的替代方案來實現東西。 –

1

我不明白這一點,因爲你提到,你這樣做是這種方式只是因爲

我之所以想這樣做是爲了讓我可以檢查 的價值字符串,然後替換它。

你對自己施加了不必要的限制。爲什麼不把字符串存儲在不同的密鑰下?

+0

我正在使用它以便能夠添加特定字符串的暱稱。所以說服務更新了文本視圖的名稱(A),並且用戶具有該人的暱稱(B),而不是發佈到文本視圖的原始名稱(A),發佈暱稱(B)。在這種情況下@Josephus – mtorres

+0

,我建議您在鍵盤命名中添加一些邏輯。例如,你可以有一個前綴「暱稱 - 」,你可以附加到你的普通密鑰。 – josephus

+0

另一種方法是使用不同的sharedpreference存儲暱稱。這樣你可以使用相同的鍵(所以對字符串模式沒有限制) – josephus