在一项活动中,我使用以下代码保存了一些数据:
SharedPreferences sharedPref = this.getPreferences(4);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("myPhone", mCountryCode + mPhone);
editor.commit();
在另一个活动中(在同一个应用程序中)我尝试检索数据:
SharedPreferences sharedPref = this.getPreferences(4);
myPhone=sharedPref.getString("myPhone", "");
但我得到的是一个空字符串!
我做错了什么?
答案 0 :(得分:2)
来自Activity
文档:
public SharedPreferences getPreferences(int mode)
检索
SharedPreferences
对象,以访问此活动专用的首选项。这只是通过将此活动的类名称作为首选项名称传递来调用基础getSharedPreferences(String, int)
方法。
正如描述所说,使用此方法获得的首选项对于活动是私有的。
您需要使用此方法:
SharedPreferences sharedPref = this.getSharedPreferences("YourApp", 4);
这会获得彼此共享的首选项。可以找到该确切方法的文档here。 "YourApp"
是首选项文件的名称,因此可以根据需要进行更改,但每次使用时都必须相同。
答案 1 :(得分:1)
SharedPreferences prefs = getSharedPreferences("your_file_name", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("yourStringName", "value_here");
editor.commit();
使用以下代码
访问它SharedPreferences prefs = getSharedPreferences("your_file_name",
MODE_PRIVATE);
String string = prefs.getString("yourStringName",
"default_value_here");
答案 2 :(得分:1)
首先,确保您的mCountryCode和mPhone不是空字符串。
你正在使用带有标志4(MODE_MULTI_PROCESS)的getPreferences():
这是Gingerbread(Android 2.3)之前和之前的遗留(但未记录)行为,并且在定位此类版本时隐含此标志
使用以下内容代替保存:
SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("myPhone", mCountryCode + mPhone);
editor.commit();
加载:
SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE);
myPhone = prefs.getString("myPhone", "");