在我的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实现这样的功能的方法是什么?请帮助我有个好主意的人。 提前谢谢。
答案 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);
就是这样,请查看上面给出的链接以查看使用详情。