我正在尝试在GSON的帮助下将此列表转换为json
[DataClass(label=valueOne, text=some.value, version=9.0, ui=null, ref=null, icon=android.graphics.drawable.BitmapDrawable@2f9631a), DataClass(label=valueOne, text=some.value, version=9.0, ui=null, ref=null, icon=android.graphics.drawable.BitmapDrawable@2f9631a)]
并得到此错误
java.lang.IllegalArgumentException: class android.content.res.ColorStateList declares multiple JSON fields named mChangingConfigurations
我是这样做的
Gson().toJson(list)
可能有什么问题?
它抱怨了一些原因对这个可绘制的来源。但不知道为什么。我想这是因为@
和改变它到定期Z
,仍然没有成功
下面是drawable的值
android.graphics.drawable.BitmapDrawableZ25d399b
1条答案
按热度按时间bnlyeluc1#
Gson使用“类型适配器”来执行Java对象到JSON的转换,反之亦然。如果没有为类型提供自定义类型适配器,并且Gson也没有提供默认类型适配器,则Gson使用反射来确定如何将Java对象转换为JSON,以及如何将其转换回Java对象。然而,由于它考虑了私有字段,在对第三方库或Android平台中的类进行序列化或反序列化时,不应依赖于它。这些类的私有字段依赖于实现,在不同版本之间可能会重命名或删除,甚至在不同的Android设备之间可能会有所不同。
因此,即使异常与名为
mChangingConfigurations
的字段有关(该字段显然存在于类ColorStateList
及其一个超类中),这里的主要问题是您正在尝试使用Gson来序列化Android平台类。要解决这个问题,请尝试重构代码,不要将
icon
存储为JSON中的BitmapDrawable
。根据您的用例,也许可以存储文件路径,或者图标的URL。然后,当再次阅读JSON时,您必须重新构建图标。旁注:问题开头的
toString()
输出与Gson执行转换的方式无关,字符串android.graphics.drawable.BitmapDrawable@2f9631a
恰好是默认的toString()
结果。