国产午夜精品理论片,国产亚洲精品久久久999蜜臀,国产精品久久久久久久久免费,国产卡一卡二卡3卡4乱码,国产精品午夜无码av天美传媒

Android:使用Gson結(jié)合泛型類靈活解析JSON數(shù)據(jù)
發(fā)布時(shí)間:2016/1/15 來源:搜數(shù)網(wǎng)絡(luò) 瀏覽:59

一般比較規(guī)范的后端JSON返回?cái)?shù)據(jù),會(huì)遵循一些指定的JSON格式,比如:

錯(cuò)誤:

[javascript] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. {  
  2.     "status": -1,  
  3.     "data"null,  
  4.     "err""not_found"  
  5. }  
正確:
[javascript] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. {  
  2.     "status": 0,  
  3.     "data": {  
  4.         "price": 4,  
  5.         "name""脈動(dòng)",  
  6.         "type""飲料",  
  7.         "amount": 50,  
  8.         "summary""隨時(shí)隨地,脈動(dòng)回來",  
  9.         "picture""http://www.jpjy365.com/images/201402/source_img/29726_G_1393285888119.jpg",  
  10.         "hot"true,  
  11.         "sales": 100  
  12.     },  
  13.     "err"null  
  14. }  
那么我們可以定義一個(gè)通用數(shù)據(jù)類,比如叫做:UniApiResult
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. public class UniApiResult {  
  2.   
  3.     @SerializedName("status")  
  4.     private int mStatus;      
  5.   
  6.     @SerializedName("err")  
  7.     private String mErr;  
  8.   
  9.     @SerializedName("data")  
  10.     private T mData;  
  11.   
  12.     public int getStatus() {  
  13.         return mStatus;  
  14.     }  
  15.   
  16.     public void setStatus(int status) {  
  17.         mStatus = status;  
  18.     }  
  19.   
  20.     public String getErr() {  
  21.         return mErr;  
  22.     }  
  23.   
  24.     public void setErr(String err) {  
  25.         mErr = err;  
  26.     }  
  27.   
  28.     public T getData() {  
  29.         return mData;  
  30.     }  
  31.   
  32.     public void setData(T data) {  
  33.         mData = data;  
  34.     }  
  35. }  
然后,我們?cè)谛枰馕鰯?shù)據(jù)特定的數(shù)據(jù)時(shí),只需要根據(jù)特定的數(shù)據(jù)類型定義一個(gè)Model就可以了,如:
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. public class GoodsInfoModel {      
  2.       
  3.     @SerializedName("price")  
  4.     private int mPrice;  
  5.       
  6.     @SerializedName("name")  
  7.     private String mName;  
  8.       
  9.     @SerializedName("type")  
  10.     private String mType;  
  11.       
  12.     @SerializedName("amount")  
  13.     private int mAmount;  
  14.       
  15.     @SerializedName("summary")  
  16.     private String mSummary;  
  17.       
  18.     @SerializedName("picture")  
  19.     private String mPicture;  
  20.       
  21.     @SerializedName("hot")  
  22.     private boolean mHot;  
  23.       
  24.     @SerializedName("sales")  
  25.     private int mSales;  
  26.       
  27.     public int getPrice() {  
  28.         return mPrice;  
  29.     }  
  30.   
  31.     public void setPrice(int price) {  
  32.         mPrice = price;  
  33.     }  
  34.   
  35.     public String getName() {  
  36.         return mName;  
  37.     }  
  38.   
  39.     public void setName(String name) {  
  40.         mName = name;  
  41.     }  
  42.   
  43.     public String getType() {  
  44.         return mType;  
  45.     }  
  46.   
  47.     public void setType(String type) {  
  48.         mType = type;  
  49.     }  
  50.   
  51.     public int getAmount() {  
  52.         return mAmount;  
  53.     }  
  54.   
  55.     public void setAmount(int amount) {  
  56.         mAmount = amount;  
  57.     }  
  58.   
  59.     public String getSummary() {  
  60.         return mSummary;  
  61.     }  
  62.   
  63.     public void setSummary(String summary) {  
  64.         mSummary = summary;  
  65.     }  
  66.   
  67.     public String getPicture() {  
  68.         return mPicture;  
  69.     }  
  70.   
  71.     public void setPicture(String picture) {  
  72.         mPicture = picture;  
  73.     }  
  74.   
  75.     public boolean getHot() {  
  76.         return mHot;  
  77.     }  
  78.   
  79.     public void setHot(boolean hot) {  
  80.         mHot = hot;  
  81.     }  
  82.   
  83.     public int getSales() {  
  84.         return mSales;  
  85.     }  
  86.   
  87.     public void setSales(int sales) {  
  88.         mSales = sales;  
  89.     }  
  90.   
  91. }  
那么,我們?cè)诮馕鰯?shù)據(jù)的時(shí)候,用如下方法即可:
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. /** 
  2.  * 數(shù)據(jù)解析 
  3.  * 
  4.  * @param jsonStr JSON字符串 
  5.  * @return UniApiResult 數(shù)據(jù)對(duì)象 
  6.  */  
  7. public UniApiResult parseJson(String jsonStr) {  
  8.     Gson gson = new Gson();  
  9.     Type jsonType = new TypeToken
  10.     }.getType();  
  11.     return gson.fromJson(jsonStr, jsonType);  
  12. }  
值得注意的是,TypeToken的用法,TypeToken是Gson庫(kù)中包含的一種獲取JSON類型的類,可以傳入泛型來獲取類型,而getType或getClass這種方法是獲取不到泛型類型的,所以Gson解析泛型類型數(shù)據(jù)的關(guān)鍵就是TypeToken,這個(gè)方法解析完成后,即可返回UniApiResult類型的對(duì)象,通過getData()方法,就可以獲取到GoodsInfoModel類型的對(duì)象數(shù)據(jù)了,是不是很省事了呢?


原文:http://blog.csdn.net/yuanguozhengjust/article/details/50477128

 

 

返回