gson容易混淆的几处
来源:互联网 发布:淘宝代码装修视频 编辑:程序博客网 时间:2024/05/16 04:24
使用gson,后台如果返回类似:data:[]
伪代码: A为一个类
private List<A> parseResultInfo(String jsonString) {
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<A>>() {
}.getType();
return gson.<ArrayList<A>>fromJson(jsonString, type);
}
后台返回类似:data:{}
伪代码:A为一个类
public A parseHospitalDepartment(String datas){
Gson gson = new Gson();
return gson.fromJson(datas,A.class);
}
弄错就会提示:Could not find method com.google.gson.reflect.TypeToken.<init>
还有个容易出错的点:我在一个类A里面定义了一个内部类B,正常情况下是:由于gson使用映射的方法找到B.class中对应的成员变量名称,将json格式的的字段对应的值赋值给B类中对应的成员变量。
但是由于经过proguard混淆后 B类的内部的成员变量名称发生了变化。已经无法找到json字段中对应的类成员变量。所以导致所有生成的B类成员变量值都为null 。
所以解决办法有两个:
1是:声明内部类不混淆
在proguard-rules.pro中加入下面规则。 对B.Java的所有private 对象不进行obfuscation。
如果是内部类可以使用下面声明::
-keep class com.project.mocha_patient.login.FindForgotInfoActivity$ForgetResponse {*;}
-keep class com.project.mocha_patient.account_setting.ChangePasswordActivity$ChangePasswordResponse {*;}
如果不是内部类:
-keep public class com.google.gson.**
-keep public class com.google.gson.** {public private protected *;}
-keep public class com.project.mocha_patient.login.A{ private *; }
2是:在内部类B中,将所有被gson使用的变量都加下面声明,这样gson就可以识别对应的变量。
@SerializedName("name")
//下面是内部类
static class B{
@SerializedName("bsOrderNo")
String bsOrderNo;//订单号
@SerializedName("bsState")
String bsState;//充值结果
@SerializedName("bsLastTime")
String bsLastTime; //日期
@SerializedName("bsAmount")
String bsAmount; //金额
}
- gson容易混淆的几处
- 容易混淆的几组名词
- java几点容易混淆的概念
- 几种容易让人混淆的SIP服务器
- aspectj几点容易混淆的点备忘
- 【随机过程】几种容易混淆的概率分布
- 容易混淆的概念
- 容易混淆的const
- 容易混淆的概念
- 容易混淆的函数
- 容易混淆的概念
- 容易混淆的知识点
- 容易混淆的 const
- Gson的混淆打包问题
- 最容易混淆的英语单词
- Ajax---------容易混淆的 对象
- 容易混淆的JavaScript脚本
- Python容易混淆的地方
- 复杂网络中重要节点挖掘方法综述
- pycharm使用bs4的一个奇葩的问题
- 进制转换
- Android 自动编译、打包生成apk
- Java中Array与ArrayList的主要区别
- gson容易混淆的几处
- Android学习(一)创建一个基本的活动及基本的几个函数
- java poi导入EXCEL
- Linux常用命令(二)文件处理命令2
- window下使用python import cx_Oracle时报错
- seo简单语法
- 常用网站链接
- 给OCR文字识别软件的扫描选项设置教程
- CSS实现垂直水平居中