为什么我没有得到保存的偏好?

时间:2014-02-05 16:04:45

标签: java android

在一项活动中,我使用以下代码保存了一些数据:

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", "");

但我得到的是一个空字符串!

我做错了什么?

3 个答案:

答案 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", "");

更多信息herehere