构建发布版本 Retrofit2 后获得 200 但为空数据
Posted
技术标签:
【中文标题】构建发布版本 Retrofit2 后获得 200 但为空数据【英文标题】:After building release version Retrofit2 gets 200 but empty data 【发布时间】:2020-10-27 09:42:19 【问题描述】:我收到了这个问题:android Retrofit: Response 200 in both release and debug version but release version have empty value returned
但我认为这不是一个理想的解决方案。但这让我知道这与 Proguard 设置有关。
我已经检查了来自服务器的数据是否不正确。但它是一样的,很好。我的gradle设置相关Proguard是这样的:
buildTypes
release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
debug
minifyEnabled false
debuggable true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
并且 proguard-rules 文件没有任何异常行。
我将把它改成这个。包括shrinkResources
属性:
buildTypes
release
shrinkResources true
minifyEnabled true
debuggable false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
debug
shrinkResources true
minifyEnabled false
debuggable true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
启用proguard后如何正确接收数据?
【问题讨论】:
你在调试模式下得到正确的数据了吗? @ShaluTD 是的。它在调试模式下工作正常。 我可以查看您的完整应用程序 gradle 文件吗?还有你在调试模式下返回的数据? 【参考方案1】:我通过保留模型的数据名称解决了这个问题。
将此行写入proguard-rules.pro
-keep class com.example.model.* // model is package name.
或者,如果您使用的是 androidX。你可以使用@Keep
注解。
@Keep
class YourItem(
val name: String,
val age: Int?
)
【讨论】:
以上是关于构建发布版本 Retrofit2 后获得 200 但为空数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 RxJava2 和 Retrofit2 时如何访问响应头?
Retrofit2 + OkHttp3设置Http请求头(Headers)方法汇总
java.lang.NoClassDefFoundError: retrofit2.Retrofit$Builder Fabric 初始化