在我的应用中,我尝试将键值保存为零或一,具体取决于是否选中了复选框。我在不同的活动中检索这些值。但是,当我尝试检索该值时,我得到一个空字符串:
在活动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文件?
答案 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
中查看getSharedPreferences
和getDefaultSharedPreferences
之间的区别
====
解决方案要么始终使用DefaultSharedPreferences
,要么始终使用名为"ScienceCoursesCheck"
的文件。
答案 2 :(得分:0)
问题是您是否正在 DefaultSharedPreference 中保存值并尝试从ScienceCoursesCheck
首选项文件中检索值。
尝试以下setDefaults
方法的代码。getDefaultSharedPreference和getSharedPreference方法不同。
请参阅此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 "";
}