简介:
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; }
对了这里的网络请求引入了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