我找到了与com.google.gson库相关的proguard问题和答案,但没有找到与com.google.code.gson相关的问题:gson:2.3.1'文库
我正在使用'com.google.code.gson:gson:2.3.1'
库。没有proguard它的工作正常,但当我启用proguard时,下面的代码给出了错误的结果。
Gson gson = new Gson();
UserDetails userDetails = gson.fromJson(response, UserDetails.class);
if (userDetails != null) {
Logger.appendInfoLog("gsonData" + userDetails, "gsonData");
Logger.appendInfoLog("gsonData" + userDetails.getCity(), "cityName");
}
在此代码中,userDetails.getCity()返回null。
我所尝试的是: - 为了防止这个库在proguard-rules.pro中进行模糊处理,我已经宣布它是这样的
-keep class com.google.code.gson.**
但它不起作用,感谢任何帮助
答案 0 :(得分:1)
Gson默认使用成员字段名称(通过反射)进行解析,因此如果您使用ProGuard等工具,您的班级UserDetails
将会更改其成员字段名称。你要做的就是让proguard不要模糊你的模型类。
例如:如果你的模型类在mypackage.model包中,你可以添加规则:
-keep class mypackage.model。** {*; }
-keepclassmembers class mypackage.model。** {*; }
答案 1 :(得分:0)
您是否为UserDetails中的每个字段都有 @SerializedName()注释? Proguard模糊了所有名称(类/字段/方法名称),因此gson不会在您的类中找到字段。