未检索键值存储数据

时间:2017-02-26 03:33:27

标签: android sharedpreferences

在我的应用中,我尝试将键值保存为零或一,具体取决于是否选中了复选框。我在不同的活动中检索这些值。但是,当我尝试检索该值时,我得到一个空字符串:

在活动1(ScienceCoursesCheck)中保存关键值:

public void setDefaults(String key, String value) {
   SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
   SharedPreferences.Editor editor = sharedPref.edit();
   editor.putString(key, value);
   editor.commit();

}
public void onCheckboxClicked(View view) {
   // Is the view now checked?
   boolean checked = ((CheckBox) view).isChecked();

   // Check which checkbox was clicked
   switch(view.getId()) {
       case R.id.checkBox_APBio:
           if (checked) {
               setDefaults("APBio", "1");
           }
           else {
               setDefaults("APBio", "0");
               break;
           }
}}

检索活动2(MyHome)中的键值:

public static String getDefaults(String key, Context context) {
   SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
   return preferences.getString(key, null);
}

public void myMethod() {
   SharedPreferences myPrefs = getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE);  
   String APBio = myPrefs.getString("APBio","");
   if (APBio.equals("1")){
       Button myButton = new Button(this);
       myButton.setText(APBio);
       RelativeLayout ll = (RelativeLayout)findViewById(R.id.activity_my_home);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
       ll.addView(myButton, lp);
   }
  }

第二个活动是否正在访问正确的SharedPreferences文件?

4 个答案:

答案 0 :(得分:0)

问题是因为当您将项目存储在SharedPreferences中时,您正在使用

PreferenceManager.getDefaultSharedPreferences

但是当你检索它们时,你正在使用

getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE);

这是两个不同的SharedPreferences文件。尝试使用getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE);作为设置方法。或许您打算在getDefaults()而不是activity 2中使用myPrefs方法

答案 1 :(得分:0)

这是因为您要保存在DefaultSharedPreferences文件

   SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);

并从另一个名为"ScienceCoursesCheck"

的文件中检索
SharedPreferences myPrefs = getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE);  

并且它们不是同一个文件!

在此answer

中查看getSharedPreferencesgetDefaultSharedPreferences之间的区别

====

解决方案要么始终使用DefaultSharedPreferences,要么始终使用名为"ScienceCoursesCheck"的文件。

答案 2 :(得分:0)

问题是您是否正在 DefaultSharedPreference 中保存值并尝试从ScienceCoursesCheck首选项文件中检索值。

尝试以下setDefaults方法的代码。getDefaultSharedPreferencegetSharedPreference方法不同。

请参阅此link了解差异。

 public void setDefaults(String key, String value) {
       SharedPreferences sharedPref = getApplicationContext().getDefaultSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE);
       SharedPreferences.Editor editor = sharedPref.edit();
       editor.putString(key, value);
       editor.commit();

    }

希望这可以帮助你...

答案 3 :(得分:0)

将以下代码用于共享首选项。致电

  

Util.saveInfo(activityContext,_key,_value)

当您要保存信息时。然后拨打

  

Util.getInfo(getApplicationContext(),_密钥)

获取信息。

public class Util{
public static void saveInfo(Context context, String key, String value )
{
    try
    {
        PreferenceManager.getDefaultSharedPreferences(context).edit().putString(key, value).apply();
    }
    catch (Exception ex)
    {
        Log.e(TAG," saveInfo "+ex+"");
    }
}
public static String getInfo(Context context, String key)
{
    try {
        return PreferenceManager.getDefaultSharedPreferences(context).getString(key,"");
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return "";
}