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

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

Retrofit网络请求库应用02——json解析的更多相关文章

  1. 「Python 编程」编码实现网络请求库中的 URL 解析器

    摘要:怎么写出更短的代码并不是这次要讨论的话题.今天我们来研究一下:运行代码的计算机是如何找到目标服务器的? 相信各位 Python 开发者都用过 Requests 库,有些朋友还用过 WebSock ...

  2. Retrofit网络请求库应用01

    PS:什么是Retrofit? 在官方文档中有这样一句话--A type-safe HTTP client for Android and Java(一个类型安全的http client库),具体的话 ...

  3. Android进阶笔记02:Android 网络请求库的比较及实战(二)

    一.Volley        既然在android2.2之后不建议使用HttpClient,那么有没有一个库是android2.2及以下版本使用HttpClient,而android2.3及以上版本 ...

  4. [转]Android各大网络请求库的比较及实战

    自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...

  5. Android之网络请求库

    自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...

  6. Android 各大网络请求库的比较及实战

    自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...

  7. Android进阶笔记01:Android 网络请求库的比较及实战(一)

    在实际开发中,有的时候需要频繁的网络请求,而网络请求的方式很多,最常见的也就那么几个.本篇文章对常见的网络请求库进行一个总结. 一.使用HttpUrlConnection: 1. HttpUrlCon ...

  8. 造轮子 | 怎样设计一个面向协议的 iOS 网络请求库

    近期开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 须要干些啥 对于大部分 App 而言,业务层 ...

  9. 浅论Android网络请求库——android-async-http

    在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Insta ...

随机推荐

  1. Python Fabric远程自动部署简介

    Fabric是一个Python(2.5-2.7)库,用于简化使用SSH的应用程序部署或系统管理任务. 它提供的操作包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入. ...

  2. 补写:Best Coder #85 1001 Sum(前缀和)

    sum Accepts: 640 Submissions: 1744 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/13107 ...

  3. Pendant

    Pendant Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. python实现查有道词典

    因为要考英语四级,所以我今天一大早就起来被英语单词,但是作为英语渣渣的我,只能是在网页上挨个查单词的意思.查的多了,心生厌倦,便想着如何才能在终端下查单词,那样速度不就很快了? NOW,我仔细观察每次 ...

  5. 【LuaJIT版】从零开始在 macOS 上配置 Lua 开发环境

    前言 这篇文章针对的是基于 LuaJIT 的环境配置.借助于 LuaJIT,Lua 的执行效率可以进一步提升几十倍.如果你不是很清楚自己是需要 Lua 还是 LuaJIT,那么建议你从 LuaJIT ...

  6. 为JS内置对象添加常用方法

    1.字符串全部替换: String.prototype.replaceAll = function(s1,s2){ return this.replace(new RegExp(s1,"gm ...

  7. [转载] Linux内存管理之mmap详解

    转载自http://blog.chinaunix.net/uid-26669729-id-3077015.html 一. mmap系统调用 1. mmap系统调用 mmap将一个文件或者其它对象映射进 ...

  8. 设计模式的征途—11.外观(Facade)模式

    在软件开发中,有时候为了完成一项较为复杂的功能,一个类需要和多个其他业务类交互,而这些需要交互的业务类经常会作为一个完整的整体出现,由于涉及的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似服 ...

  9. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(九)Linux下安装redis及redis的常用命令和操作

    redis简介 Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存 ...

  10. 激光相机数据融合(4)--KITTI数据集中matlab接口说明及扩展

    KITTI数据集接口已经提供了matlab接口,本篇将说明详细说明其应用并与PCL进行对接.PCL为C++点云处理语言库,详情可见:http://pointclouds.org/ 程序可以从官网下载, ...