我的共享偏好有一个非常奇怪的问题。我正在使用它们来存储用户 ID、不同的设置等等。如果用户单击了我的菜单中的项目(我正在使用Menu-Drawer),我正在使用一个切换片段的活动。
每次登录后,我都会存储用户配置文件。这很完美。完成此操作后,我可以重新启动应用程序,从内存中杀死它,我什至可以重新启动我的设备并且我的值仍然被存储。但是当我切换片段时,例如我在主视图中并单击菜单中的“关于应用程序”,一切都消失了。我的价值观是空的。
更奇怪的地方:如果我已经在主视图中时通过选择主项目来强制活动重新加载片段,它仍然被存储。只有当我用不同类型的片段替换它时,一切都会丢失。
我不知道为什么应用程序会这样。这一切都在相同的活动中,具有相同的上下文。我总是使用 getActivity 在片段中获取我的上下文。
这是我存储它的代码的简化片段。
public static void storeUserProfile(Context context, LoginEvent event, String userId, String emailAddress, String passwordHash) {
SharedPreferences userPrefs = context.getSharedPreferences(AppConfig.USER_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userPrefs.edit();
editor.clear();
editor.putString("username", event.userName);
editor.putString("id", userId);
editor.putString("email", emailAddress);
editor.commit();
}
这就是我切换片段的方式:
HomeFeedFragment fragment = new HomeFeedFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.commit();