首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在使用/不使用Gson的情况下将对象列表保存和加载到SharedPreferences?

如何在使用/不使用Gson的情况下将对象列表保存和加载到SharedPreferences?
EN

Stack Overflow用户
提问于 2016-04-23 00:47:53
回答 2查看 433关注 0票数 0

在我的Android应用程序中,我使用Gson在SharedPreferences中保存/加载对象的数组列表。下面是我使用Gson编写的代码。

代码语言:javascript
复制
public static ArrayList<RequestModal> getModalList(Context ctx) {
    Gson gson = new Gson();
    String json = getSharedPreferences(ctx).getString("ModalList", new Gson().toJson(new ArrayList<>()));
    Type type = new TypeToken<ArrayList<RequestModal>>() {}.getType();
    return gson.fromJson(json, type);
}

在这里,"RequestModal“是包含一些字符串和整数的简单对象。它在“在线”的情况下工作得很好。但如果互联网是离线的,永远在下面的代码上工作。

代码语言:javascript
复制
Type type = new TypeToken<ArrayList<RequestModal>>() {}.getType();

我该怎么解决它呢?在使用/不使用Gson的情况下实现这样的功能的方法是什么?任何有好主意的人请帮助我。提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2016-04-23 01:31:26

您可以在不使用Gson的情况下实现此功能:

代码语言:javascript
复制
public static EpisodeDetails parseEpisodeDetails(String content) {
    EpisodeDetails episodeDetails = new EpisodeDetails();
    try {
        JSONObject jsonObject = new JSONObject(content);
        episodeDetails.title = jsonObject.getString("title");
        episodeDetails.subTitle = jsonObject.getString("subtitle");
        episodeDetails.synopsis = jsonObject.getString("synopsis");
        episodeDetails.ends_on = jsonObject.getString("ends_on");

        JSONArray images = jsonObject.getJSONArray("image_urls");
        if (images.length() > 0) {
            episodeDetails.image_url = images.getString(0);
        }

    } catch (JSONException e) {
        e.printStackTrace();
        return null;
    }
    return episodeDetails;
}

我所做的只是获取字符串,在你的例子中,是保存在共享前缀ModalList中的字符串,然后将值插入到我的结构中,在我的代码中,结构被称为EpisodeDetails,在你的代码中,对应的是RequestModal。如果你不想通过代码来做这件事,并且想尝试另一个库,我推荐Jackson。

另一件事,在这行上:

代码语言:javascript
复制
String json = getSharedPreferences(ctx).getString("ModalList", new Gson().toJson(new ArrayList<>()));

您的第二个参数不是必需的。getString将要加载的键作为第一个参数,将默认值作为第二个参数(在结果为空的情况下)。您可以将其更改为""null

票数 0
EN

Stack Overflow用户

发布于 2016-04-23 01:55:15

嗯,你的问题的另一个解决方案可能是TinyDB。它利用Gson将对象的ArrayLists保存在sharedPrefs中,其使用方法非常简单:

代码语言:javascript
复制
Person person = new Person("john", 24);
tinydb.putObject("user1", person);

ArrayList<Person> usersWhoWon = new ArrayList<Person>();
tinydb.putListObject("allWinners", usersWhoWon);

就是这样,查看我上面给出的链接来查看使用细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36799316

复制
相关文章

相似问题

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