簡介:
Json數據是類似xml類型的數據轉化格式但是它的傳輸速率遠遠高於xml的解析速率。
這裏簡單的對用gson解析json格式的數據,爲什麼說是簡單的介紹呢,因爲博主有更簡單的解析方式後期會進行推出或者掃描頭像進
行私聊(公衆號)。
進行集成:
這裏按照as爲例進行集成,在對應model的gradle中加入
<span style="font-size:18px;">compile 'com.google.code.gson:gson:2.2.4'</span>
如果是用eclipse的話可以進行下載gson架包放到libs文件夾下
gson下載鏈接:點擊打開鏈接
源碼下載:點擊打開鏈接
GitHub:點擊打開鏈接
既然是Json的解析那麼先來一段json
<span style="font-size:18px;">http://apicloud.mob.com/boxoffice/day/query?key=11342cf45e16c&area=CN</span>
對應的數據格式是:
{
"msg": "success",
"retCode": "200",
"result": [
{
"cur": 1747.74,
"days": 5,
"name": "葉問3",
"sum": 53467.76
},
{
"cur": 1842.6,
"days": 5,
"name": "瘋狂動物城",
"sum": 20840.64
},
{
"cur": 430.67,
"days": 30,
"name": "美人魚",
"sum": 330737.57
}
]
}
這裏顯示的只是局部的,完整的json數據是這個
根據Json數據進行構建數據的Model記得反序列化當然不用可以。
public class Model implements Serializable {
private String msg;
private String retCode;
private List<ResultModel> results=new ArrayList<>();
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getRetCode() {
return retCode;
}
public void setRetCode(String retCode) {
this.retCode = retCode;
}
public List<ResultModel> getResults() {
return results;
}
public void setResults(List<ResultModel> results) {
this.results = results;
}
}
因爲這個Json數據是JsonArray數組對象的不是JsonObject的單個對象所以出現集合List<ResultModel>下面是Resultodel的數據對象:
private double cur;
private int days;
private String name;
private double sum;
public void setCur(double cur) {
this.cur = cur;
}
public void setDays(int days) {
this.days = days;
}
public void setName(String name) {
this.name = name;
}
public void setSum(double sum) {
this.sum = sum;
}
public double getCur() {
return cur;
}
public int getDays() {
return days;
}
public String getName() {
return name;
}
public double getSum() {
return sum;
}
數據的Json的解析:
對了這裏的網絡請求引入了xUtils框架,後期將推出xUtils的框架學習,關於xUtils的框架集成
1、AndroidStudio的集成:
在對應的gradle下
compile 'org.xutils:xutils:3.3.32'
2、eclipse中:
將xUtilts架包放進libs文件夾中進行add library
xUtils框架,下載
如果編輯後出現錯誤可參考我另外一篇博客,錯誤信息
進行數據的獲取:
爲Button設置點擊事件進行獲取Json數據然後把數據轉化成對象
ic void getMovies(View view) {
String url = "http://apicloud.mob.com/boxoffice/day/query";
RequestParams params = new RequestParams();
params.addQueryStringParameter("key", "11342cf45e16c");
params.addQueryStringParameter("area", "CN");
HttpUtils httpUtils = new HttpUtils();
httpUtils.send(HttpRequest.HttpMethod.GET, url, params, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Log.i("TAG", responseInfo.result);
Gson gson = new Gson();
// Type listType = new TypeToken<LinkedList<Model>>(){}.getType();
Type type = new TypeToken<Model>() {}.getType();
Model model = gson.fromJson(responseInfo.result, type);
List<ResultModel> result = model.getResults();
Log.i("TAG", model.getRetCode());
Log.i("TAG", model.getMsg());
if ("success".equals("success")) {
for (int i = 0; i < result.size(); i++) {
Log.i("TAG", result.get(i).getCur() + "測試");
Log.i("TAG", result.get(i).getDays() + "");
Log.i("TAG", result.get(i).getName());
Log.i("TAG", result.get(i).getSum() + "");
}
}
}
這裏做一下簡單的解釋關於下面兩者的區別
gson.fromJson(responseInfo.result, type);
gson.fromJson(responseInfo.result, Model.class);
第一個表示的是當Json數據是JsonArray數組對象時,採用這種方式進行數據轉化成對象,當數據是JsonObject對象時是使用第二種的比如下面
{
"msg": "success",
"result": {
"conclusion": "時來運轉,事事如意,功成名就,富貴自來吉"
},
"retCode": "200"
}
這裏就把Json數據轉化成了對象Model model = gson.fromJson(responseInfo.result, type);,既然對象獲取到了那麼數據的獲取就比較簡單了。
博客開始時我說過只是做一下簡單的介紹,對Gson的數據解析Json有更好的解決方案或者說是更好的方法,就是借用 Retrofit網絡框架+Gson轉化方式
好了,這期是博客就到這裏了,寫的比較倉促,如果發現錯誤或者描述不當還請多多包涵,zui'ho