因此,我们正在开发此Android应用程序。我们有一个登录活动,当用户成功登录时会收到一些信息。我们有一个名为SessionManager的类来处理将所述数据保存到SharedPreferences。无法在其他活动中检索已保存的SharedPreferences
SessionManager总是始终从同一文件中检索SharedPreferences。它在那里硬编码。
public SessionManager(Context context) {
this.preferences = context.getSharedPreferences(PREFERENCE_NAME, 0);
this.editor = this.preferences.edit();
this.jsonParser = new Gson();
}
jsonParser在那里,所以我们可以将信息保存为json对象。
public final void storeProfile(UserProfile profile) {
this.editor.putString(STORAGE_KEY, this.jsonParser.toJson(profile));
this.editor.commit();
}
private static final String STORAGE_KEY = "PROFILE";
private String getStoredValue() {
return this.preferences.getString(STORAGE_KEY, null);
}
public UserProfile getStoredProfile() {
String val = getStoredValue();
return (val == null) ? null : this.jsonParser.fromJson(val, UserProfile.class);
}
从理论上讲,这应该意味着我们应该能够配置文件存储在一个活动,然后拿回来的另一项活动,对不对?
除了没有发生!看起来我只能在保存的同一活动中检索已保存的信息!
我在登录活动中调用storeProfile(),然后在另一个活动中调用getStoredProfile(),并返回null。
我在登录活动中调用storeProfile(),然后在登录活动中调用getStoredProfile(),并返回存储的配置文件。它也适用于两个不同的SessionManager实例调用storeProfile()和getStoredProfile()。
我在其他活动中手动设置存储的配置文件,并且它检索手动存储的配置文件就好了。
是否有一些范围规则或SharedPreferences的东西,我失踪了?
请发布** getStoredValue()**代码。 –
@NishantPardamwar道歉。我已经发布了代码。 – Socratease
这对我来说确定,提供[mcve]?此外,我会尝试用应用程序上下文初始化'SessionManager',而不是活动之一。但是我现在已经在某个地方看到,共享首选项在单个应用程序的所有上下文中都是同一个文件,所以这不应该是你的问题。我也会避免使用'.edit();'生命周期较长。在'storeProfile'中只将'Editor'作为局部变量。 (然后,这不应该成为一个问题,我只是觉得这是不好的风格)。 – Ped7g