今天在解析json時,遇到解析錯誤的問題。 總結來說,字段必須要一致,字段類型要一致,序列化,還要在混淆的情況下要保持相應的類不被混淆。 要保持bean 不被混淆,在 PRoguard-rules.pro添加如下代碼:
-keep class 包名.** { *; }如下面這個路徑下的UserInfo
com.baidu.app.improve.bean.UserInfo對應的混淆文件配置:
-keep class com.baidu.app.improve.bean.** { *; }若在混淆情況下不做如此設置則會報諸如“com.a.b.b.h cannot be cast to com.baidu.app.improve.bean.UserInfo ”這樣的異常。 當然解析方式不正確的話,也會報此異常。
這樣一個json數據:
{ "code": 0, "message": "", "result": { "id": "081234568945", "sn": "", "nickname": "abcd", "mobile": "18888888", "email": "", "avatar": "", "birth": "", "gender": "1", "name": "", "longitude": "", "latitude": "", "availablePoint": 0, "receivePoint": 0, "makePoint": 0, "age": 0, "genderDescr寫的bean如下:ResultBean
public class ResultBean<T> { private T result; private int code; private String message; .....get/setter方法 }UserInfo
public class UserInfo implements Serializable{ private String genderDescription; private int receivePoint; private String gender; private String residenceParentIds; private int makePoint; private String latitude; private String mobile; private String birth; private String avatar; private String residenceId; private String residenceMergerName; private String memberTypeName; private String nickname; private String name; private int availablePoint; private String id; private String sn; private String email; private int age; private String longitude; private String residenceName; ......get/setter方法......}gson解析的正確姿勢為:
private static TextHttpResponseHandler mHandler = new TextHttpResponseHandler() { @Override public void onStart() { super.onStart(); log("HttpResponseHandler:onStart"); } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { log("HttpResponseHandler:onFailure responseString:" + responseString); } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { Type type = new TypeToken<ResultBean<UserInfo>>() { }.getType(); ResultBean<UserInfo> resultBean = AppOperator.createGson().fromJson(responseString, type); ...............}gson解析集合 json
{ "code": 0, "message": "", "result": { "currentCount": 3, "dataList": [ { "id": "6", "longitude": 116.42565, "latitude": 39.84026, "isRead": true, "isCollection": true, "deadline": "2017-02-24 17:34", "memberType": "個人", "pupuContent": "", "publishDate": "2017-02-23 17:34", "intervalTime": "5天", "publisher": "", "publisherAvatar": "", "recipientName": "", "recipientAvatar": "", "distance": 0 }, { "id": "5", "longitude": 116.42565, "latitude": 39.84026, "isRead": true, "isCollection": true, "deadline": "2017-02-24 17:34", "memberType": "個人", "pupuContent": "", "publishDate": "2017-02-23 17:34", "intervalTime": "5天", "publisher": "", "publisherAvatar": "", "recipientName": "", "recipientAvatar": "", "distance": 0 }, { "id": "2", "longitude": 116.42565, "latitude": 39.84026, "isRead": false, "isCollection": false, "deadline": "2017-02-24 17:34", "memberType": "個人", "pupuContent": "", "publishDate": "2017-02-23 17:34", "intervalTime": "5天", "publisher": "", "publisherAvatar": "", "recipientName": "", "recipientAvatar": "", "distance": 0 } ], "pageNo": 1, "pageSize": 100, "isLastPage": true, "lastCount": 1, "count": 3 }}public class PageBean<T> implements Serializable { private int currentCount; private List<T> dataList; .........get/setter方法....... }Tweet
public class PPMessage implements Serializable { private String id; private int distance; private String recipientAvatar; private double latitude; private String pupuContent; private boolean isRead; private boolean isCollection; private String publishDate; private int min; private String publisherAvatar; private String publisher; private String recipientName; private String memberType; private String deadline; private double longitude; .......get/setter方法......}解析
TextHttpResponseHandler mHandler = new TextHttpResponseHandler() { @Override public void onStart() { super.onStart(); log("HttpResponseHandler:onStart"); } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { onRequestError(); log("HttpResponseHandler:onFailure responseString:" + responseString); } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { log("HttpResponseHandler:onSuccess responseString:" + responseString); try { ResultBean<PageBean<T>> resultBean = AppOperator.createGson().fromJson(responseString, getType()); ................}....................這里用了泛型。
|
新聞熱點
疑難解答