如何使用GSON从共享首选项中检索字符串?

时间:2013-11-20 06:41:42

标签: android listview sharedpreferences gson

我正在保存我的

"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));

1 个答案:

答案 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);