Retrofit网络请求库应用02——json解析
PS:上一篇写了Retrofit网络请求库的简单使用,仅仅是获取百度的源码,来证明连接成功,这篇讲解如何解析JSON数据,该框架不再是我们之前自己写的那样用JsonArray等来解析,这些东西,我们都不用写,只需要写和数据相关的model就可以,下面是简单的JSON数据格式,我们来分析一下。
{ "Xname": "中国", "type": "true", "province": [ { "name": "黑龙江", "city": "哈尔滨" }, { "name": "北京", "city": "中国" } ] }
首页也是分步来写代码
- 有JSON数据
- 根据JSON数据写model类
- 导入Retrofit包相关包
- 添加注入
- 创建retrofit对象
- 执行异步处理
1:有JSON数据
我是用IDEA自己写的web程序,返回一个JSON数据,如果你们没有,可以使用字符串,也可以写一个web项目,只返回JSON数据即可,如果你们不会写或者不想麻烦可以给我留言,我发给你们。好了,先测试一下接口是否可用 http://10.232.146.59:8080/sjjx.do,因为是本地的,用的是自己的ip。
2:导入Retrofit包相关包
compile "com.squareup.retrofit2:retrofit:2.1.0" compile "com.squareup.retrofit2:converter-gson:2.1.0" compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
导包的时候要注意,studio2.3以下的可以在搜索框搜不到retrofit的依赖,我的是2.0,直接添加的。所以搜不到也不用太惊讶,毕竟官方文档写了环境要求是studio2.3和java7及以上。
3:根据JSON数据写model类,添加注入。
注入的时候要注意,名字一定要和JSON数据一样,比如说JSON数据时Xname:中国,这里也一定要写是@SerializedName("Xname"),否则找不到哦。
package retrofit.cn.myretrofit; import com.google.gson.annotations.SerializedName; import java.util.List; /** * Created by cMusketeer on 17/12/12. * * @author 刘志通 */ public class Information { @SerializedName("Xname") public String Xname; @SerializedName("type") public boolean type; @SerializedName("province") public List<Address> list; public List<Address> getList() { return list; } public void setList(List<Address> list) { this.list = list; } public boolean isType() { return type; } public void setType(boolean type) { this.type = type; } public String getXname() { return Xname; } public void setXname(String xname) { Xname = xname; } }
package retrofit.cn.myretrofit; import com.google.gson.annotations.SerializedName; /** * Created by cMusketeer on 17/12/12. * * @author 刘志通 */ public class Address { @SerializedName("name") private String name; @SerializedName("city") private String city; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
4:创建retrofit对象,执行异步处理
我们都知道,上一篇是返回百度的源码,但是返回的值并不是String类型,是一种二进制流,所以,我又重写了方法让他返回String,这里我们是要解析JSON,所以不用再写返回String了,只需添加这一句就可以.addConverterFactory(GsonConverterFactory.create()),这里baseUrl是我的ip地址+端口,也就是说我访问的是我自己写的web程序。是不是很简单,就这么几句话就可以解析JSON。
Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://10.232.146.59:8080") .addConverterFactory(GsonConverterFactory.create()) .build(); Service service = retrofit.create(Service.class); Call<Information> baidu = service.getBaidu(); baidu.enqueue(this);
重写方法:
@Override public void onResponse(Call<Information> call, Response<Information> response) { Log.e("fanhuizhi","返回值是:"); Log.e("fanhuizhi",response.body()+""); } @Override public void onFailure(Call<Information> call, Throwable t) { Log.e("fanhuizhi","出错了:"); }
结果图:这里是调试运行,按照步骤来即可。成功解析
本文版权归作者所有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。