android返回数据给服务器,Android集成Retrofit2请求服务器返回报文赋值为空得问题...

在学习Android集成Retrofit2时,遇到请求服务器返回报文赋值为空的问题。调试正常,但打包安装后取json字段值为空。经排查,原因是开启了代码混淆,需在proguard - rules.pro文件中加入Retrofit2、OkHttp3、Gson等的混淆配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

986dec03ab21

实体类结构图

986dec03ab21

请求代码

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

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

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

986dec03ab21

build.grald文件

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

986dec03ab21

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,所以这两个也需要添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值