首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将List<Object>保存到SharedPreferences?

如何将List<Object>保存到SharedPreferences?
EN

Stack Overflow用户
提问于 2015-01-23 18:20:11
回答 9查看 73.8K关注 0票数 41

我有一个产品列表,我从webservice检索,当应用程序第一次打开时,应用程序从webservice获取产品列表。我要将此列表保存到共享首选项。

代码语言:javascript
复制
    List<Product> medicineList = new ArrayList<Product>();

其中Product类是:

代码语言:javascript
复制
public class Product {
    public final String productName;
    public final String price;
    public final String content;
    public final String imageUrl;

    public Product(String productName, String price, String content, String imageUrl) {
        this.productName = productName;
        this.price = price;
        this.content = content;
        this.imageUrl = imageUrl;
    }
}

我如何保存这个列表,而不是每次都从webservice请求?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2015-01-23 18:27:14

只能使用原语类型,因为首选项保存在内存中。但是你可以使用Gson将你的类型序列化为json,并将字符串放入首选项中:

代码语言:javascript
复制
private static SharedPreferences sharedPreferences = context.getSharedPreferences(STORE_FILE_NAME, Context.MODE_PRIVATE);

private static SharedPreferences.Editor editor = sharedPreferences.edit();
    
public <T> void setList(String key, List<T> list) {
    Gson gson = new Gson();
    String json = gson.toJson(list);
    
    set(key, json);
}

public static void set(String key, String value) {
    editor.putString(key, value);
    editor.commit();
}

来自@StevenTB的以下评论中的额外镜头

检索

代码语言:javascript
复制
 public List<YourModel> getList(){
    List<YourModel> arrayItems;
    String serializedObject = sharedPreferences.getString(KEY_PREFS, null); 
    if (serializedObject != null) {
         Gson gson = new Gson();
         Type type = new TypeToken<List<YourModel>>(){}.getType();
         arrayItems = gson.fromJson(serializedObject, type);
     }
}
票数 54
EN

Stack Overflow用户

发布于 2017-07-18 15:21:04

代码语言:javascript
复制
SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);

为了保存

代码语言:javascript
复制
Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(myObject);
prefsEditor.putString("MyObject", json);
prefsEditor.commit();

For get

代码语言:javascript
复制
Gson gson = new Gson();
String json = mPrefs.getString("MyObject", "");
MyObject obj = gson.fromJson(json, MyObject.class);
票数 7
EN

Stack Overflow用户

发布于 2018-07-05 17:13:46

正如接受答案中所说的,我们可以保存对象列表,如下所示:

代码语言:javascript
复制
public <T> void setList(String key, List<T> list) {
        Gson gson = new Gson();
        String json = gson.toJson(list);
        set(key, json);
    }

    public void set(String key, String value) {
        if (setSharedPreferences != null) {
            SharedPreferences.Editor prefsEditor = setSharedPreferences.edit();
            prefsEditor.putString(key, value);
            prefsEditor.commit();
        }
    }

通过使用以下命令获取它:

代码语言:javascript
复制
public List<Company> getCompaniesList(String key) {
    if (setSharedPreferences != null) {

        Gson gson = new Gson();
        List<Company> companyList;

        String string = setSharedPreferences.getString(key, null);
        Type type = new TypeToken<List<Company>>() {
        }.getType();
        companyList = gson.fromJson(string, type);
        return companyList;
    }
    return null;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28107647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档