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. JS插入新的节点

    insertBefore() 语法: insertBefore(newchild,refchild) newchild 插入新的节点 refchild 在此节点前插入新节点 <ul id=&qu ...

  2. Linux学习(十七)压缩与打包

    一.关于打包和压缩 打包和压缩的最大意义在于减少文件传输中需要的流量.打包的方式大概有tar命令,zip命令.压缩的方式有gzip,bzip2,xz.tar命令可以通过参数将压缩和打包在一起执行. 二 ...

  3. java爬虫--jsoup简单的表单抓取案例

    分析需求: 某农产品网站的农产品价格抓取 网站链接:点击打开链接 页面展示如上: 标签展示如上: 分析发现每日价格行情包括了蔬菜,水果,肉等所有的信息,所以直接抓每日行情的内容就可以实现抓取全部数据. ...

  4. 机器翻译评测——BLEU改进后的NIST算法

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/7765345.html 上一节介绍了BLEU算的缺陷.NIS ...

  5. Java多线程Future模式

    Java多线程Future模式有些类似于Ajax的异步请求Future模式的核心在于:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑 假设服务器的处理某个业务,该业务可以分 ...

  6. FLP不可能性(FLP impossibility)

    FLP不可能性(FLP impossibility) FLP impossibility是一个定理,它证明了在分布式情景下,无论任何算法,即使是只有一个进程挂掉,对于其他非失败进程,都存在着无法达成一 ...

  7. 在WebForm中实现购物车思路

    关于网站购物车的实现的思考   写在前面的话:刚来公司的的时候,老大安排了一个任务,企业站,但是需要实现购物车的功能,以前没做过,所有就向周围的人请教了一下如何实现购物车,自己也在网上搜了一下,有了些 ...

  8. C#内部关于绑定事件Event的线程安全

    private EventHandler _FieldsChanged;public event EventHandler FieldsChanged{    add    {        Even ...

  9. c语言的类型、运算符与表达式

    title: 2017-10-17c语言的类型.运算符与表达式 tags: c程序设计语言 grammar_cjkRuby: true --- 1.1 数据类型 char 字符型,一个字节 int 整 ...

  10. CLR类型设计之泛型(一)

    在讨论泛型之前,我们先讨论一下在没有泛型的世界里,如果我们想要创建一个独立于被包含类型的类和方法,我们需要定义objece类型,但是使用object就要面对装箱和拆箱的操作,装箱和拆箱会很损耗性能,我 ...