Android集成Retrofit2请求服务器返回报文赋值为空得问题

学习Android过程中,集成了Retorfit2,遇到了请求服务器返回报文赋值为空得问题

要做的事情很简单,使用Retrofit发送请求到服务器,服务器返回json,客户端解析字段。

但是使用过程中出现了一个问题,使用Android安装到手机(虚拟机和实体机),调试得时候是正常的,但是打包安装到手机后会出现,请求服务器返回之后,取json字段,值为空得情况,假设服务器返回{"resultCode":"success","resultMessage":"消息"},但是调用response.body()获取到实体类后,属性都是null。

实体类结构图
请求代码

Log这一行打印会出现Result(resultCode=null,resultMessage=null)

这是赋值没有成功。分析了一下是不是实体类得原因,但是我得字段和报文体是一致的 ,抱着试试得想法在data类加了@SerializedName,结果还是不行。

最后排查得出原因是因为,开了代码混淆,

build.grald文件

需要在proguard-rules.pro文件中加入混淆配置

proguard-rules.pro

#retrofit2 混淆

-dontwarnjavax.annotation.**

-dontwarnjavax.inject.**

# OkHttp3

-dontwarnokhttp3.logging.**

-keep class okhttp3.internal.*{*;}

-dontwarnokio.**

# Retrofit

-dontwarnretrofit2.**

-keep class retrofit2.* { *; }

-keepattributesSignature

-keepattributesExceptions

# Gson

-keepattributesEnclosingMethod

-keep class com.dh.notice.net.*{*;}# 自定义数据模型的bean目录

# RxJava RxAndroid

#-dontwarn sun.misc.**

#-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {

#    long producerIndex;

#    long consumerIndex;

#}

#-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {

#    rx.internal.util.atomic.LinkedQueueNode producerNode;

#}

#-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {

#    rx.internal.util.atomic.LinkedQueueNode consumerNode;

#}

根据网友们得填坑经验,Retrofit官方只提供了Retrofit得混淆配置,但是因为集成了Okhttp和Gson,所以这两个也需要添加。

你可能感兴趣的:(Android集成Retrofit2请求服务器返回报文赋值为空得问题)