學習Android過程中柳击,集成了Retorfit2庶溶,遇到了請求服務(wù)器返回報文賦值為空得問題
要做的事情很簡單宅此,使用Retrofit發(fā)送請求到服務(wù)器,服務(wù)器返回json褐捻,客戶端解析字段掸茅。
但是使用過程中出現(xiàn)了一個問題,使用Android安裝到手機(虛擬機和實體機)柠逞,調(diào)試得時候是正常的昧狮,但是打包安裝到手機后會出現(xiàn),請求服務(wù)器返回之后板壮,取json字段逗鸣,值為空得情況,假設(shè)服務(wù)器返回{"resultCode":"success","resultMessage":"消息"},但是調(diào)用response.body()獲取到實體類后撒璧,屬性都是null透葛。
Log這一行打印會出現(xiàn)Result(resultCode=null,resultMessage=null)
這是賦值沒有成功。分析了一下是不是實體類得原因卿樱,但是我得字段和報文體是一致的 获洲,抱著試試得想法在data類加了@SerializedName,結(jié)果還是不行殿如。
最后排查得出原因是因為,開了代碼混淆最爬,
需要在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.*{*;}# 自定義數(shù)據(jù)模型的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;
#}
根據(jù)網(wǎng)友們得填坑經(jīng)驗涉馁,Retrofit官方只提供了Retrofit得混淆配置,但是因為集成了Okhttp和Gson爱致,所以這兩個也需要添加烤送。