Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法在其他活动中检索保存的SharedReference_Android - Fatal编程技术网

Android 无法在其他活动中检索保存的SharedReference

Android 无法在其他活动中检索保存的SharedReference,android,Android,所以我们正在开发这个Android应用程序。我们有一个登录活动,当用户成功登录时,它会接收一些信息。我们有一个名为SessionManager的类,它负责将所述数据保存到SharedReference SessionManager始终从同一文件检索SharedReferences。里面是硬编码的 public SessionManager(Context context) { this.preferences = context.getSharedPreferences(PREF

所以我们正在开发这个Android应用程序。我们有一个登录活动,当用户成功登录时,它会接收一些信息。我们有一个名为SessionManager的类,它负责将所述数据保存到SharedReference

SessionManager始终从同一文件检索SharedReferences。里面是硬编码的

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(),它也可以工作

我在另一个活动中手动设置了存储的配置文件,它可以很好地检索手动存储的配置文件


是否有一些作用域规则或我缺少的共享引用内容?

结果证明我是个傻瓜,每次尝试获取它们时,我都不小心擦除了我的首选项。

请同时发布getStoredValue()代码。@NishantPardamwar表示歉意。我已经发布了代码。我觉得这没问题,你能提供吗?另外,我将尝试使用应用程序上下文而不是活动1初始化
SessionManager
。但我现在在某个地方读到,共享首选项在单个应用程序的所有上下文中都是相同的文件,所以这不应该是您的问题。我也会避免做
.edit()具有较长的生命周期。在
storeProfile
中,仅将
编辑器作为局部变量获取。(再说一遍,这不应该构成问题,我只是觉得这是一种糟糕的风格)。