Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 解決android使用gson解析json字符串,並使用混淆編譯方式打包apk遇到的問題

解決android使用gson解析json字符串,並使用混淆編譯方式打包apk遇到的問題

編輯:關於Android編程

解決android使用gson解析json字符串,並使用混淆編譯方式打包apk遇到的問題 方法一: Gson gson = new Gson(); // 將json格式字符串轉化為List<對象> Type listType = new TypeToken<ArrayList<PersonMsgMini>>(){}.getType(); personMsgList = gson.fromJson(jsonObject.getString("list"), listType); 方法二: public class AttendanceMsgGson { //字段名要跟json字符串中的key一致 private ArrayList<AttendanceMsg> list; public ArrayList<AttendanceMsg> getList() { return list; } public void setList(ArrayList<AttendanceMsg> list) { this.list = list; }   } Gson gson = new Gson(); AttendanceMsgGson attGson = gson.fromJson(result, AttendanceMsgGson.class); 下面是重點: 說明: 其中兩種gson解析json字符串的方法都沒有問題,問題主要是使用了混淆編譯的方式進行apk打包(其中不混淆編譯進行apk打包則一切正常),因為客戶端代碼中的JavaBean(實體類)的字段名稱必須與服務端返回json字符串中的key要一致,才能進行解析,而混淆編 譯之後,客戶端代碼中的JavaBean(實體類)的類名與其字段名稱全部變成了a、b、c、d等等字符串,這與服務端返回的json字符串中的key不一致,導致解析失敗。所以,解決的辦法是:在進行混淆編譯進行打包apk的時候,過濾掉存放所有JavaBean(實體類)的包不進行混淆編譯。經過測試,一切正常。 在proguard.cfg文件中添加: # removes such information by default, so configure it to keep all of it.  -keepattributes Signature  # Gson specific classes  -keep class sun.misc.Unsafe { *; }  #-keep class com.google.gson.stream.** { *; }  # Application classes that will be serialized/deserialized over Gson  -keep class com.google.gson.examples.android.model.** { *; } //這句非常重要,主要是濾掉 com.bgb.scan.model包下的所有.class文件不進行混淆編譯 -keep class com.bgb.scan.model.** {*;}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved