Android网络编程(九)Retrofit2前篇[基本使用]

前言

Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,而OkHttp现在已经得到Google官方认可,不了解OKHttp的请查看本系列的前作。

1.使用前准备

老生长谈,先配置build.gradle:

当然别忘了在manifest加入访问网络的权限:

这次我们访问的网站产生了变化,我们用淘宝ip库,里面有访问接口的说明:

1. 请求接口(GET): /service/getIpInfo.PHP?ip=[ip地址字串]

2. 响应信息: (json格式的)国家 、省(自治区或直辖市)、市(县)、运营商

3. 返回数据格式:

其中code的值的含义为,0:成功,1:失败。

2.用Retrofit异步访问网络

编写实体类

我们可以用JSON字符串转换成Java实体类(POJO)这个网站将Json转为实体类,经过修改的实体类如下:

IpModel.Java

IpData.java:

请求网络接口

Retrofit提供的请求方式注解有@GET和@POST等,分别代表GET请求和POST请求,我们在这里访问的界面是“getIpInfo.php”。参数注解有@PATH和@Query等,@Query就是我们的请求的键值对的设置,在这里@Query(“ip”)代表键,“String ip”则代表值。

创建Retrofit

这里的baseUrl加上之前@GET(“getIpInfo.php”)定义的参数形成完整的请求地址;addConverterFactory用于指定返回的参数数据类型,这里我们支持String和Gson类型。

用Retrofit创建接口文件

用retrofit创建我们之前定义的IpService接口对象,并调用该接口定义的getIpMsg方法得到Call对象。

用Call请求网络并处理回调

这里是异步请求网络,回调的Callback是运行在主线程的。得到返回的Response后将返回数据的country字段用Toast显示出来。如果想同步请求网络请使用 call.execute(),如果想中断网络请求则可以使用 call.cancel()。

完整的代码如下:

3.请求参数

上文讲了Retrofit访问网络的基本方法,接下来我们来了解下Retrofit常用的请求参数。

请求方法

请求方法除了上文讲到的@GET,还有@POST、@PUT、@DELETE、@HEAD、@OPTIONS、@PATCH、@HTTP。其中@HTTP用来替换以上7个,其他的分别对应着不同的请求方法,不明白的请查看Android网络编程(一)HTTP协议原理这一篇文章。

@Query

前面的例子就用了Query用来查询参数。

@QueryMap

如果Query参数比较多,那么可以通过@QueryMap方式将所有的参数集成在一个Map统一传递。

@Path

@Path用来替换路径。

@Body

@Body与@POST注解一起使用,提供查询主体内容,其中ApiInfo是一个bean类。

@Headers

@Headers用来添加头部信息,上面用的是固定头部,也可以采用动态头部:

@Multipart

@Multipart用来上传文件

本文分享自微信公众号 - 刘望舒(liuwangshuAndroid)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-10-02

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

大道缓存1 缓存特征2 缓存介质3 缓存分类和应用场景缓存实战

用户请求从界面(浏览器/App)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。

15910
来自专栏Linux驱动

QT-第一个程序 Hello QT , 以及QT creator介绍

第一个程序 - Hello QT 首先写main.cpp: #include <QApplication> #include <QMainWindow> #in...

43270
来自专栏上善若水

042android初级篇之android混淆代码ProGuard

配置文件的位置以及开关的设置位置,android studio 和eclipse稍微有些差异,这里以android sudio为例:

21030
来自专栏酷玩时刻

前端后台以及游戏中使用google-protobuf详解

protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更小更快更简单。你可以用定义自己protoBuf的数据结构,用...

32720
来自专栏程序你好

在.net项目中生成的pdb(程序数据文件)是什么文件?

11030
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第三十一天 WebService学习【悟空教程】

简单的网络应用使用单一语言写成,它的唯一外部程序就是它所依赖的数据库。大家想想是不是这样呢?

26540
来自专栏java思维导图

开源项目renren-fast解读,让java不再难懂(二)

1、百度百科的解释: XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览...

31840
来自专栏闵开慧

tomcat6.0下找不到jasper-runtime.jar

今天有点需求,需要用jasper-runtime.jar包。但是我在我的\apache-tomcat-6.0.16\lib目录下,怎么也找不到这个jar包。结果...

38550
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列24-spring(3)-配置文件相关问题

Java面试系列24-spring(3)-配置文件相关问题 12.解释一下Dependency Injection(DI)和IOC(inversion of ...

29840
来自专栏Android先生

Android中极简的js与java的交互库-SimpleJavaJsBridge

最近接触android中js与java交互的东西很多,当然它们之间的交互方式有几种,但是我觉得这几种交互方式都存在一定的不足,这是我决定编写SimpleJava...

16430

扫码关注云+社区

领取腾讯云代金券