Android-Exception整理之com.google.gson.internal.xxx cannot be cast to xxx
问题描述:
项目用到了Google的Gson库,不混淆情况下一切正常,当代码混淆打包时会遇到这种异常1
java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to xxx
或者1
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to xxx
解决方案:
1.首先确保有正确的在混淆文件proguard-rules.pro有这么几行:
1 | -keepattributes Signature |
2.确保自己项目内用到的model类或者bean类(总之就是和Gson解析相关的模型类)有在proguard-rules.pro内keep声明:
1 | -keep class com.package.name.bean.** { *; } |
注:com.package.name是你项目包名
3.JSON串转成自定义类的List对象时,要使用正确的方式:
首先习惯使用的错误方式是1
List<T> list = gson.fromJson(jsonString, type);
正确的方法应该是这样的1
2Type type = new TypeToken<List<T>>(){}.getType();
List<T> list = gson.fromJson(jsonString, type)