使用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