2016-11-23 45 views
-1

因此,我们正在开发此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的东西,我失踪了?

+0

请发布** getStoredValue()**代码。 –

+0

@NishantPardamwar道歉。我已经发布了代码。 – Socratease

+0

这对我来说确定,提供[mcve]?此外,我会尝试用应用程序上下文初始化'SessionManager',而不是活动之一。但是我现在已经在某个地方看到,共享首选项在单个应用程序的所有上下文中都是同一个文件,所以这不应该是你的问题。我也会避免使用'.edit();'生命周期较长。在'storeProfile'中只将'Editor'作为局部变量。 (然后,这不应该成为一个问题,我只是觉得这是不好的风格)。 – Ped7g

回答

0

原来我是个傻瓜,每次我试图让他们不小心擦掉我的偏好。

相关问题