2016-03-14 75 views
-2

我想從多個活動訪問單個共享首選項文件。我遇到了this similar question,它有一個很好解釋的答案,建議爲此創建一個輔助類。所以我也跟着。這裏是我的代碼: -無法解析方法'getString'錯誤:SharedPreferences幫助程序類

1 //helper class 
2 public class AppUserInfo { 
3 public static final String KEY_PREF_USERNAME = "username"; 
3 public static final String APP_USER_INFO = 
4 AppUserInfo.class.getSimpleName(); 
5 private SharedPreferences _sharedPrefs; 
6 private SharedPreferences.Editor _prefEditor; 
7 
8 public AppUserInfo(Context context) { 
9 this._sharedPrefs = context.getSharedPreferences(APP_USER_INFO,Activity.MODE_PRIVATE); 
10 this._prefEditor = _sharedPrefs.edit(); 
11 } 
12 
13 public String getUsername() { 
14 return _prefEditor.getString(KEY_PREF_USERNAME, ""); 
15 } 
16 
17} 

然而,當定義getUsername()法,IDE(Android Studio中)所指出的錯誤如下: -

Cannot resolve method 'getString(java.lang.String,java.lang.String)

(也試過實現沒有輔助類中的溶液。而結果..)

我會得到相同的錯誤時,在已經創建的共享user_info偏好文件中活動A並存儲鍵值對{username : [email protected]}在裏面,我試圖做到這一點在活動B: -

SharedPreferences _userInfo = getSharedPreferences("user_info", Context.MODE_PRIVATE); 
SharedPreferences.Editor _prefEditor = _userInfo.edit(); 

String username = _prefEditor.getString("username",""); 

如何解決這個問題? 我也接受不同的方法,如果有的話。

+0

您無法從編輯器中獲取字符串 - 使用_sharedPrefs代替。 – Darwind

+0

@Darwind哦,該死的我!非常感謝.. –

+0

嘿嘿,沒問題 - 有時它是讓你感到困惑的小事情:-) – Darwind

回答

0

SharedPreferences.Editor不包含getter方法。它有類似改變自己的喜好方法 - 如果你想獲得對應於你的喜好文件的密鑰值putString(), remove()等 -

public String getUsername() { 
    return this._sharedPrefs.getString(KEY_PREF_USERNAME, ""); 
} 
0

你混淆了兩件事

private SharedPreferences _sharedPrefs; 
private SharedPreferences.Editor _prefEditor; 

在這裏,_sharedPrefs將成爲您從讀取_prefEditor將對象寫入到的對象。

你的方法應該讀

public String getUsername() { 

    // the read object 
    return _sharedPrefs.getString(KEY_PREF_USERNAME, ""); 
} 

public void setUsername(String s) { 

    // the write object 
    _prefEditor.putString(KEY_PREF_USERNAME, s); 
    _prefEditor.commit() 
} 

當編輯對象編輯值,一定要打電話commit它之後,推動這些更改回可讀目標。