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","出错了:");
}
结果图:这里是调试运行,按照步骤来即可。成功解析


Retrofit网络请求库应用02——json解析的更多相关文章
- 「Python 编程」编码实现网络请求库中的 URL 解析器
摘要:怎么写出更短的代码并不是这次要讨论的话题.今天我们来研究一下:运行代码的计算机是如何找到目标服务器的? 相信各位 Python 开发者都用过 Requests 库,有些朋友还用过 WebSock ...
- Retrofit网络请求库应用01
PS:什么是Retrofit? 在官方文档中有这样一句话--A type-safe HTTP client for Android and Java(一个类型安全的http client库),具体的话 ...
- Android进阶笔记02:Android 网络请求库的比较及实战(二)
一.Volley 既然在android2.2之后不建议使用HttpClient,那么有没有一个库是android2.2及以下版本使用HttpClient,而android2.3及以上版本 ...
- [转]Android各大网络请求库的比较及实战
自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...
- Android之网络请求库
自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...
- Android 各大网络请求库的比较及实战
自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...
- Android进阶笔记01:Android 网络请求库的比较及实战(一)
在实际开发中,有的时候需要频繁的网络请求,而网络请求的方式很多,最常见的也就那么几个.本篇文章对常见的网络请求库进行一个总结. 一.使用HttpUrlConnection: 1. HttpUrlCon ...
- 造轮子 | 怎样设计一个面向协议的 iOS 网络请求库
近期开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 须要干些啥 对于大部分 App 而言,业务层 ...
- 浅论Android网络请求库——android-async-http
在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Insta ...
随机推荐
- JS插入新的节点
insertBefore() 语法: insertBefore(newchild,refchild) newchild 插入新的节点 refchild 在此节点前插入新节点 <ul id=&qu ...
- Linux学习(十七)压缩与打包
一.关于打包和压缩 打包和压缩的最大意义在于减少文件传输中需要的流量.打包的方式大概有tar命令,zip命令.压缩的方式有gzip,bzip2,xz.tar命令可以通过参数将压缩和打包在一起执行. 二 ...
- java爬虫--jsoup简单的表单抓取案例
分析需求: 某农产品网站的农产品价格抓取 网站链接:点击打开链接 页面展示如上: 标签展示如上: 分析发现每日价格行情包括了蔬菜,水果,肉等所有的信息,所以直接抓每日行情的内容就可以实现抓取全部数据. ...
- 机器翻译评测——BLEU改进后的NIST算法
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/7765345.html 上一节介绍了BLEU算的缺陷.NIS ...
- Java多线程Future模式
Java多线程Future模式有些类似于Ajax的异步请求Future模式的核心在于:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑 假设服务器的处理某个业务,该业务可以分 ...
- FLP不可能性(FLP impossibility)
FLP不可能性(FLP impossibility) FLP impossibility是一个定理,它证明了在分布式情景下,无论任何算法,即使是只有一个进程挂掉,对于其他非失败进程,都存在着无法达成一 ...
- 在WebForm中实现购物车思路
关于网站购物车的实现的思考 写在前面的话:刚来公司的的时候,老大安排了一个任务,企业站,但是需要实现购物车的功能,以前没做过,所有就向周围的人请教了一下如何实现购物车,自己也在网上搜了一下,有了些 ...
- C#内部关于绑定事件Event的线程安全
private EventHandler _FieldsChanged;public event EventHandler FieldsChanged{ add { Even ...
- c语言的类型、运算符与表达式
title: 2017-10-17c语言的类型.运算符与表达式 tags: c程序设计语言 grammar_cjkRuby: true --- 1.1 数据类型 char 字符型,一个字节 int 整 ...
- CLR类型设计之泛型(一)
在讨论泛型之前,我们先讨论一下在没有泛型的世界里,如果我们想要创建一个独立于被包含类型的类和方法,我们需要定义objece类型,但是使用object就要面对装箱和拆箱的操作,装箱和拆箱会很损耗性能,我 ...