当前位置: 首页 > 面试题库 >

Gson-从Json转换为类型化ArrayList

太叔马鲁
2023-03-14
问题内容

使用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。我该怎么办?


问题答案:

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

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

说明文件

表示泛型类型 牛逼

Java尚未提供表示通用类型的方法,因此此类提供了。强制客户端创建此类的子类,即使在运行时也可以检索类型信息。

例如,要为创建类型文字List<String>,您可以创建一个空的匿名内部类:

TypeToken<List<String>> list = new TypeToken<List<String>>() {};

该语法不能用于创建具有通配符参数(例如Class<?>或)的类型文字List<? extends CharSequence>

科特林:

如果您需要在 Kotlin中 进行操作,则可以这样操作:

val myType = object : TypeToken<List<JsonLong>>() {}.type
val logs = gson.fromJson<List<JsonLong>>(br, myType)



 类似资料:
  • 使用Gson库,如何将JSON字符串转换为自定义类的?基本上,是由我的Android应用程序创建的不同类型的日志实现的接口--SMS日志、呼叫日志、数据日志--而这个是所有这些日志的集合。我在第6行总是发现一个错误。 似乎编译器不明白我指的是类型化的。我该怎么办?

  • 问题内容: 是否有可能使用Gson或JAVA上的任何其他库将匿名对象类型序列化为JSON? 在此示例中,字符串jsonstr返回空值。 问题答案: Gson不支持该功能。从用户指南 与内部类,匿名类和本地类中的外部类相对应的字段将被忽略,并且不包含在序列化或反序列化中 您可以使用一个(或其他)表示匿名类型的超类来描述要使用重载方法进行序列化的内容,但是您仍然会丢失匿名子类中定义的任何新字段。(显然

  • 问题内容: 我正在尝试使用GSON将JSON对象转换为POJO。 JSON字串 与GSON一起使用的AutomationProjectsList类 自动化项目POJO 我正在使用的代码 JSONArray jsonArray =新的JSONArray(response.getEntity(String.class)); 但是它给出了一个例外: 为什么会收到IndexOutOfBoundsExcep

  • 在下面来自的语法中,泛型类型参数在实例化原始类型数组后用于类型转换,

  • 问题内容: 我知道以前曾问过这个问题。由于我的Java和android新手技能。我不能解决这个问题超过一个星期。 我和我的一个朋友开发了一个android项目,那里有几件事。 这件事中最奇怪的部分是,它仅在我从Google Play商店下载并对其进行测试时才发生。不是从本地android studio安装或调试模式。 这可能是什么问题,或者此返回列表完全错误?我的朋友说服此代码可以正确返回,但是从

  • 最奇怪的是,只有当我从Google play商店下载并测试它时,它才会发生。不是从本地android studio安装或调试模式。 这里的问题是什么,或者这个返回列表是完全错误的?我的朋友确信,这段代码返回正确,但从play store安装,它总是一个错误。 请建议我在哪里继续挖掘? 例外是 java.lang.ClassCastException:com.google.gson.internal