我试图完成将字符串值从Fragment传输到下面的Activity。转移的结果表明,当转移到活动时,该值为空。如果您需要更多信息,请与我们联系。
片段:
//put selected chapter title in memory
String selectedChapter = chapters[position];
SharedPreferences pref = getActivity().getPreferences(0);
SharedPreferences.Editor edt = pref.edit();
edt.putString("selectedChapter", selectedChapter);
edt.commit();
//launch activity
Intent intent = new Intent(getActivity(), ChapterDetailActivity.class);
startActivity(intent);
的活动:
//retrieve selected chapter filename from previous view
SharedPreferences pref = ChapterDetailActivity.this.getPreferences(0);
String filename = pref.getString("selectedChapter", "empty");
Log.e("File: ", filename);
答案 0 :(得分:1)
我喜欢创建一个用于保存首选项的辅助类。这将使用文件名访问它们,而不是使用上下文。这意味着您的所有首选项都存储在一个位置,您可以创建常量来保存键。
当传递像"selectedChapter"
这样的字符串文字时,编译器无法检查我们是否错误拼写了该值。通过创建常量,编译器将能够检查密钥是否存在。
public class PreferencesHelper {
private SharedPreferences prefs;
private static final String FILE_NAME = "com.yourpackage.yourapp.prefs";
public static final String KEY_CHAPTER = "chapter";
public PreferencesHelper(Context context) {
prefs = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
}
/**
* Save the specified value to the shared preferences
*
* @param key
* The key of the value you wish to load
* @param value
* The value to store
*/
public void save(String key, String value) {
prefs.edit().putString(key, value).commit();
}
/**
* Load the specified value from the shared preferences
*
* @param key
* The key of the value you wish to load
* @param defValue
* The default value to be returned if no value is found
*/
public int loadString(String key, String defValue) {
return prefs.getString(key);
}
}
然后,您的活动可以像这样访问它:
PreferencesHelper prefs= new PreferencesHelper(this);
你的片段就像这样:
PreferencesHelper prefs = new PreferencesHelper(getActivity());
并访问数据:
// Save
prefs.save(PreferencesHelper.KEY_CHAPTER, chapter);
// Load
prefs.load(PreferencesHelper.KEY_CHAPTER, null)
答案 1 :(得分:0)
尝试另一种方法来获取您的SharedPreferences对象,例如使用上下文
SharedPreferences _preferences = PreferenceManager.getDefaultSharedPreferences(_context);
您可以使用getApplicationContext()
获取上下文然后阅读它,就像你拥有它一样:
_preferences.getString(key,"");
和写:
SharedPreferences.Editor editor = _preferences.edit();
editor.putString(key, val);
editor.commit();