《Android Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $》

  • 日誌錯誤

Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $
  • 出現的場景

1. 一種是所有接口都出現這個問題,一種是個別接口出現這個問題。

2. debug場景下能夠正常使用,打正式版的包使用時只要跑接口就出現這個錯誤;

  • 分析

1. 百度過很多博客,大多數報的是json解析錯誤,使用gson解析錯誤。但是debug使用的時候是正常的,所以排除;

2. 也有說是傳的數據由空格的原因,這個我也一一排查了。我獲取的數據都 et.getText().toString().trim(); 處理過了,也排除;

3. 接口編寫的問題我也查過,並沒有任何問題,debug情況下是能夠正常使用,所以排除;

4. 也有說是路徑問題,用的是同一個路徑,這個也排除;

5. 最後,唯一的不同是打包方式不一樣。打包引起不一樣的地方,那就只能是代碼混淆的問題。出現第一條的時候排查了好久,發現混淆的代碼也是沒有問題,後來才發現對應這個接口的entity類,沒有放到entity裏面,導致混淆的時候出現無法解析的情況。修改即可使用。第二個場景是修改了包名,忘記更新混淆文件proguard-rules.pro裏面的內容。

  • 解決

#---------------------------------實體類---------------------------------
##修改成你對應的包名(com.xxx.xxxx指的是包名)
 #實體類不參與混淆 com\xxx\xxxx\mvp\model\entity
-keep class com.xxx.xxxx.mvp.model.entity.** { *; }
-keep class com.jess.arms.widget.** { *; } #自定義控件不參與混淆
-keep class com.xxx.xxxx.mvp.ui.widget.** { *; } #自定義控件不參與混淆

1. 檢查實體類位置是不是寫對了;

2. 檢查你的現在的包名是不是對得上proguard-rules.pro裏面的包名。若不一樣,打正式版時必然出現無法使用的情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章