为了账号安全,请及时绑定邮箱和手机立即绑定

Gson-从Json转换为类型化ArrayList <T>

Gson-从Json转换为类型化ArrayList <T>

慕莱坞森 2019-12-13 09:12:24
使用Gson库,如何将JSON字符串转换ArrayList为自定义类的JsonLog?基本上,这JsonLog是由我的Android应用创建的各种日志(SMS日志,通话日志,数据日志)实现的界面,这ArrayList是所有这些的集合。我在第6行中不断收到错误消息。public static void log(File destination, JsonLog log) {    Collection<JsonLog> logs = null;    if (destination.exists()) {        Gson gson = new Gson();        BufferedReader br = new BufferedReader(new FileReader(destination));        logs = gson.fromJson(br, ArrayList<JsonLog>.class); // line 6        // logs.add(log);        // serialize "logs" again    }}看来编译器无法理解我指的是typed ArrayList。我该怎么办?
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

您可以使用TypeToken将json字符串加载到自定义对象中。


logs = gson.fromJson(br, new TypeToken<List<JsonLog>>(){}.getType());


查看完整回答
反对 回复 2019-12-13
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

您的JSON示例为:


{

    "status": "ok",

    "comment": "",

    "result": {

    "id": 276,

    "firstName": "mohamed",

    "lastName": "hussien",

    "players": [

            "player 1",

            "player 2",

            "player 3",

            "player 4",

            "player 5"

    ]

}

因此,如果您想将模块的数组列表保存在SharedPrefrences中,则:


1-将使用此方法将返回的arraylist转换为json格式


public static String toJson(Object jsonObject) {

    return new Gson().toJson(jsonObject);

}

2-将其保存在共享的偏好中


PreferencesUtils.getInstance(context).setString("players", toJson((.....ArrayList you want to convert.....)));

3-随时检索它从共享首选项中获取JsonString


String playersString= PreferencesUtils.getInstance(this).getString("players");

4-再次将其转换为数组列表


public static Object fromJson(String jsonString, Type type) {

    return new Gson().fromJson(jsonString, type);

}


ArrayList<String> playersList= (ArrayList<String>) fromJson(playersString,

                    new TypeToken<ArrayList<String>>() {

                    }.getType());

如果您想解析对象的ArrayList,此解决方案也是可行的。希望通过使用Gson Library帮助您。


查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 1732 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信