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","出错了:");
    }

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏月牙寂

k8s源码分析-----kubectl(2)Factory

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

92160
来自专栏葡萄城控件技术团队

AngularJS Providers 详解

供应者(Providers) ? Each web application you build is composed of objects that coll...

23350
来自专栏前端那些事

设计模式之单例模式与场景实践

单例介绍 上次总结了设计模式中的module模式,可能没有真真正正的使用在场景中,发现效果并不好,想要使用起来却不那么得心应手, 所以这次我打算换一种方式~~从...

22490
来自专栏程序员互动联盟

【专业技术】谷歌浏览器实现Javascript扩展

编者按:Javascript扩展有很多种,C++和IDL,纯JS等等,看看下文介绍一位前辈的博客,相信对大家有帮助。 写chromium扩展、写webui,还有...

36960
来自专栏项勇

笔记 34 | java线程之Thread线程优先

18650
来自专栏java 成神之路

基于ReentrantLock发生死锁的解决方案

33560
来自专栏Flutter入门到实战

实现Android主流网络框架封装,可无缝侵入切换框架

先来描述一下需求,比如说,目前正在用的http请求是Volley,现在发现使用OkHttp来封装一套会更好。又比方说,目前正在用的数据存储方案是OrmLite,...

20220
来自专栏jeremy的技术点滴

java中用好cache

29670
来自专栏大闲人柴毛毛

三句话搞定适配器模式

适配器模式的官方定义: 将一个与当前类无法兼容的接口转换成能够兼容当前类的接口。 适配器模式的大白话: 现在有一个第三方类/我们项目组中别人写的类放在我们面前,...

35660
来自专栏Phoenix的Android之旅

Android UI开发利器-DataBinding

简单的说就是它提供了一种数据和UI绑定的方法,UI元素可以自动的根据数据的更新而自动改变。 在没有DataBinding的情况下我们是这么更新视图的, 先通过f...

12530

扫码关注云+社区

领取腾讯云代金券