使用Gson库,我如何将JSON字符串转换为自定义类JsonLog
的ArrayList
?基本上,JsonLog
是由我的Android应用程序创建的不同类型的日志实现的接口--短信日志、呼叫日志、数据日志--而这个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
}
}
编译器似乎不理解我引用的是一个类型化的ArrayList
。我该怎么办?
9条答案
按热度按时间r55awzrz1#
您可以使用TypeToken将json字符串加载到自定义对象中。
文件:
表示泛型型别T。
Java还没有提供表示泛型类型的方法,所以这个类提供了。强制客户端创建这个类的子类,这样即使在运行时也可以检索类型信息。
例如,若要建立
List<String>
的型别常值,您可以建立空的匿名内部类别:TypeToken<List<String>> list = new TypeToken<List<String>>() {};
个此语法不能用于创建具有通配符参数的类型文本,如
Class<?>
或List<? extends CharSequence>
。如果您需要在Kotlin中执行此操作,您可以按以下方式执行:
或者,您可以查看this answer以了解各种替代方案。
u2nhd7ah2#
您的JSON示例为:
所以如果你想在你的SharedPreferences中保存模块的数组列表,那么:
1-将使用此方法将返回的数组列表转换为json格式
2-将其保存在共享前缀中
3-在任何时候检索它从共享首选项中获取JsonString
4-将其再次转换为数组列表
如果你想解析对象的数组列表,这个解决方案也是可行的。希望它能通过使用Gson Library来帮助你。
yrefmtwq3#
为什么没有人写这个简单的方法转换JSON字符串在列表?
t5zmwmid4#
Kotlin
或
xpszyzbs5#
如果你想使用数组,这很简单。
将
JsonLog
作为数组JsonLog[].class
提供ewm0tg9j6#
如果要从Json转换为类型化的ArrayList,指定列表中包含的对象的类型是错误的,正确的语法如下:
gdx19jrr7#
比如说,你有一个像这样的字符串。
然后您可以通过Gson将其转换为ArrayList,例如
您的HotelInfo类应该会喜欢这个。
1zmg4dgp8#
我不知道gson,但这是你如何与jonsample希望一定有类似的方式使用gson
{“玩家”:[“玩家1”,“玩家2”,“玩家3”,“玩家4”,“玩家5”] }
wztqucjr9#
在Kotlin****发送:如果发送数组列表
用于接收:如果您收到数组列表
用于发送:如果您发送模型类(例如LatLngModel.class)
用于接收:如果您收到ModelClass