我在检索"刚刚存储的"时遇到了问题。偏爱。 这是简化的场景和相关代码
片段#1
private SharedPreferences mPreferences
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
mPreferences = getActivity()
.getApplicationContext()
.getSharedPreferences(PREF_FILENAME, Context.MODE_PRIVATE);
...
}
private void someAction(String value){
mPreferences
.edit()
.putString(MY_KEY, value)
.commit();
mBus.sendEvent( someEvent ); // -->
}
片段#2
private SharedPreferences mPreferences
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
mPreferences = getActivity()
.getApplicationContext()
.getSharedPreferences(PREF_FILENAME, Context.MODE_PRIVATE);
mBus.register(this);
...
}
private void onSomeEvent( SomeEvent event ){
String value = mPreferences.getString( MY_KEY, null );
// ///////
// value is null !!! whats going on?
}
1)两个片段都被添加到Activity.onCreate
方法和片段
2)片段#1存储SharedPreference并将一个总线事件发送到Fragment#2
3)片段#2捕获总线事件,并检索存储在2)
上的相同偏好4)首选项值为null,首选项不存储在/data/data//shared_preferences/pref-filename.xml
注意:无法在公交活动上发送value
,因其他原因必须通过SharedPreference
。
我错过了什么? 为什么在保存之后没有可用的偏好?
由于
答案 0 :(得分:0)
也许您正在查看旧版本的共享偏好设置,请尝试以下解决方案:
private void onSomeEvent( SomeEvent event ) {
mPreferences = getActivity() .getApplicationContext() .getSharedPreferences(PREF_FILENAME, Context.MODE_PRIVATE);
String value = mPreferences.getString( MY_KEY, null );
}
答案 1 :(得分:0)
我建议在提交值后立即应用断点。当调试器到达那里时,转到evaluate expression按钮并输入mPreference。它将显示有关对象的信息。在那里你可以看到是否有值保存。
在访问Fragment2中的值之前执行相同的操作。看是否存在价值。如果value不存在或者更改为null,则某些代码肯定会在其间更改值。
如果这也无法解决您的问题,请尝试与Facebook团队的Stetho优秀工具集成,以分析您的数据库和共享偏好(以及更多内容)。