Android Studio - 将Json解析为Singleton并不起作用

时间:2016-01-18 09:06:04

标签: java android json android-fragments singleton

我试图将一些Json String解析为单例类" UserModel",所以我的所有片段都可以访问它。

填写我的" UserModel"时,我没有任何问题。 例如,我有一个属性类" Infos infos"在" UserModel"我做的时候会被填满

user = gson.fromJson(infos, UserModel.class);

那件事情很完美,我可以访问" user.infos。 myAttributes "。

问题是当我切换片段时," infos"我的UserModel中的类不再存在,当我想访问它时它为null。

奇怪的是,当我只是尝试在" UserModel"中添加一个字符串并对其进行修改时,字符串会在更改片段时保持更改。 所以我想当我做Json解析时会出现问题。

- 编辑 - 这是UserModel的一部分,单例类:

public class UserModel {
    public static final UserModel userModel = new UserModel();
    public String token;
    public Infos infos;

    public static UserModel getInstance() {
        Log.d("UserModel", "GetInstance");
        return userModel;
    }

    public static class Infos {
        public String id;
        public String login;
    }
}

我在每个片段中都有这个,所以我可以随处访问:

private UserModel user;

以下是我实例化的方法:

user = UserModel.getInstance();

1 个答案:

答案 0 :(得分:0)

以下是您的UserModel编写为正确的线程安全Singleton:

的示例
public class UserModel {
    public static UserModel _instance;
    public String token;
    public Infos infos;

    public static UserModel getInstance() {
        if (_instance == null) {
            synchronized (UserModel.class) {
                if (_instance == null) {
                    _instance = new UserModel();
                    _instance.infos = new Infos();
                }
            }
        }
        return _instance;
    }

    public static class Infos {
       public String id;
       public String login;
    }
}

请注意,切换片段时可能会破坏单个类(例如,当您将片段替换为另一个片段时)。

最安全的解决方案是在全局Application类中实例化您的单例,从而确保它将在您的应用程序终止之前一直存在。