Android SharedPreference未存储

时间:2016-04-28 15:35:26

标签: android android-fragments sharedpreferences

我在检索"刚刚存储的"时遇到了问题。偏爱。 这是简化的场景和相关代码

片段#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

我错过了什么? 为什么在保存之后没有可用的偏好?

由于

2 个答案:

答案 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优秀工具集成,以分析您的数据库和共享偏好(以及更多内容)。