使用具有共享首选项的单例?

时间:2014-08-13 10:48:57

标签: android singleton sharedpreferences

我使用singleton在我的应用程序上存储全局数据。 在这部分数据已经在线下载,其他部分已经保存在首选项中。

 public class MySingleton {
        private static MySingleton mInstance;

        private MySingleton() {

        }

        public static synchronized MySingleton getInstance() {
            if (mInstance == null) {
                mInstance = new MySingleton();
            }
            return mInstance;

        }
    private City city; // I download the city online
    private int userId; // I save the userId in the preferences

    public City getCity(){
    return city;
    }
    public void setCity(City city){
    this.city = city;
    }

    public int getUserId(){
    return userId;
    }

    public void setUserId(int userId){
    this.userId = userId;
    }

我在第一个活动中在线下载了cityObject,然后在单个对象上设置它们;

我的问题是当应用程序在后台时操作系统终止应用程序和对象城市然后单例变为空;

我的解决方案是在我下载第一个活动时将城市对象保存在首选项中,当城市为空时,我从首选项而不是互联网获取它。

这样做是明智的吗?

1 个答案:

答案 0 :(得分:0)

您可以将您的城市对象“转换”为JSON,并将其保存为您的sharedPreferences中的String。当你回来时,你可以读取JSON字符串并将其转换回City对象。

您可以使用Gson Library轻松实现这一目标。请参阅以下示例:

https://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples