我想从多个活动中访问单个共享首选项文件。我遇到了this similar question,它有一个很好解释的答案,建议为此目的创建一个助手类。所以我跟着..这是我的代码: -
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)指出了以下错误: -
无法解析方法'getString(java.lang.String,java.lang.String)
(还试图在没有帮助类的情况下实现解决方案。结果......)
在活动A 中创建user_info
共享偏好文件并在其中存储键值对{username : username@example.com}
后,我会遇到同样的错误尝试在活动B 中执行此操作: -
SharedPreferences _userInfo = getSharedPreferences("user_info", Context.MODE_PRIVATE);
SharedPreferences.Editor _prefEditor = _userInfo.edit();
String username = _prefEditor.getString("username","");
如何解决此错误? 如果有的话,我也会采取不同的方法。
答案 0 :(得分:0)
SharedPreferences.Editor
不包含getter方法。它有一些方法可以改变您的偏好,例如 - putString(), remove()
等。
如果要获取与首选项文件中的键对应的值,请使用 -
public String getUsername() {
return this._sharedPrefs.getString(KEY_PREF_USERNAME, "");
}
答案 1 :(得分: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
以将这些更改推回到可读对象中。