如何使用/不使用Gson将对象列表保存并加载到SharedPreferences?

时间:2016-04-22 16:47:53

标签: java android gson sharedpreferences

在我的Android应用程序中,我使用Gson来保存/加载SharedPreferences中对象的Arraylist。以下是使用Gson的代码。

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”是简单对象包含一些字符串和整数。 它适用于“在线”的情况。但是,如果互联网处于离线状态,则永远可以使用以下代码。

Type type = new TypeToken<ArrayList<RequestModal>>() {}.getType();

我该如何解决?使用/不使用Gson实现这样的功能的方法是什么?请帮助我有个好主意的人。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

你可以在没有Gson的情况下实现这个:

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的共享首字母上并在我的结构上插入值,在我的代码中称为{{1在你的代码上,通讯员是EpisodeDetails。如果你不想通过代码去做,并想尝试另一个图书馆我推荐杰克逊。

另一件事,在这一行:

RequestModal

您的第二个参数不是必需的。 String json = getSharedPreferences(ctx).getString("ModalList", new Gson().toJson(new ArrayList<>())); 将键作为第一个参数加载,默认值作为第二个参数加载(在空结果的情况下)。您可以将其更改为getString""

答案 1 :(得分:0)

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

Person person = new Person("john", 24);
tinydb.putObject("user1", person);

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

就是这样,请查看上面给出的链接以查看使用详情。