zoukankan      html  css  js  c++  java
  • 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","出错了:");
        }
    

     结果图:这里是调试运行,按照步骤来即可。成功解析

  • 相关阅读:
    《Redis 设计与实现》读书笔记(四)
    《Redis 设计与实现》读书笔记(三)
    《Redis 设计与实现》读书笔记(二)
    《Redis 设计与实现》读书笔记(一)
    《Mysql技术内幕-InnoDB存储引擎》读书笔记 (一)
    Python调试工具
    记一次偶发的bug排查——redis-py-cluster库的bug
    苹果支付的这些漏洞,你都堵上了吗?
    微软消息队列-MicroSoft Message Queue(MSMQ)队列的C#使用
    Quartz.net设置任务中同时最多运行一个实例 [DisallowConcurrentExecution]
  • 原文地址:https://www.cnblogs.com/cmusketeer/p/8027228.html
Copyright © 2011-2022 走看看