2016-03-14 220 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它之后,推动这些更改回可读目标。