我正在保存我的
"ArrayList<Item> items = new ArrayList<Item>();"
在共享首选项中使用GSON,使用以下正常工作的代码
protected static void saveItems(){
SharedPreferences prefs = context.getSharedPreferences("prefName", Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString("myList", new Gson().toJson(items).toString());
editor.apply();
}
检索
protected void retreiveItems(){
preferences = context.getSharedPreferences("prefName",android.content.Context.MODE_PRIVATE);
saveitems = preferences.getString("myList", "");
Log.d("LOG", "Retreived Items : " + saveitems);
}
但是检索再次提供JSON格式。
Retreived Items : [{"subtitle":"20 Nov 2013 12:35:19","title":"Sync Successful"},{"subtitle":"20 Nov 2013 12:35:44","title":"Sync Successful"}]
如何将每个JSON集提取为两个不同的字符串,以便我可以将其添加到我的listview
中items.add(new EntryItem(title, subtitle));
答案 0 :(得分:0)
您可以直接将json数组填充到EntryItem类对象,而不是逐个字符串。 gson将为您提供EntryItem []。
的数组例如,您的EntryItem类如下
public class EntryItem {
private String subtitle;
private String title;
// setter getter here
}
您现在可以像这样解析json字符串
EntryItem[] items = gson.fromJson(reader, EntryItem[].class);
subtiltle是json格式的日期,Entry项目也会以字符串格式给出日期,您可以根据自己的格式更改格式
如果您希望Gson在解析过程中更改日期格式,则必须执行以下操作
final GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
final DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss");
@Override
public Date deserialize(final JsonElement json, final Type typeOfT,
final JsonDeserializationContext context)
throws JsonParseException {
try {
System.out.println(json.getAsString());
return df.parse(json.getAsString());
} catch (final java.text.ParseException e) {
e.printStackTrace();
return null;
}
}
});
EntryItem[] items = builder.create().fromJson(reader, EntryItem[].class);