Retrofit使用大全
来源:互联网 发布:修改数据库system密码 编辑:程序博客网 时间:2024/06/03 17:20
珍惜作者劳动成果,如需转载,请注明出处。
http://blog.csdn.net/zhengzechuan91/article/details/50337883
Retrofit(Github地址)是square公司一套开源的http框架,简单易用,并且支持okhttp和RxJava,如果你不想为配置繁杂的http请求而写一套自己的网络请求框架,那么这套优雅的框架你不妨试试。
使用
先来说说这个框架的使用:
首先生成RestAdapter代理的接口RealService
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
然后在接口RealService中定义:
- 同步
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
如果是上面这种没有callback的同步方式,则需注意在非UI线程中调用。
- 1
- 2
- 1
- 2
- 异步
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
而如果参数中有callback的话,则可以直接在UI线程中调用,而返回值会通过callback返回。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这样我们我获取到了API返回的数据,然后再根据这些数据做一些别的处理,使用是不是很简单呢?
上面我们看到参数、Url和请求方式都是通过注解的方式设置的,非常简单方便。
注解
首先来看一些注解的定义,这个在我们添加参数时还是很重要的:
作用于注解的注解
- RestMethod
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
作用于方法的注解
- GET
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- POST
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- HEAD
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- PATCH
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- PUT
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- FormUrlEncoded
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- Headers
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- Multipart
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
作用于参数的注解
- Body
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- EncodedPath
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- EncodedQuery
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- EncodedQueryMap
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- Path
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- Query
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- QueryMap
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- Field
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- FieldMap
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- Header
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- Part
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
Android参数注解选择
上面对用到的注解做了详细的介绍,总结下Android下注解的选择:
1.post请求:使用@Body标记参数
2.get请求:如果参数为为非Map类型,使用@Query标记参数
如果参数类型为Map类型,使用@QueryMap标记参数
3.上传文件/图片请求:使@Part标记参数
4.表单类型:如果参数类型为非Map类型,使用@Field标记参数
如果参数类型为Map类型,使用@FieldMap标记参数
5.如果方法的@GET或@POST中有占位符,使用@Path标记参数
基本常用的就这么多。
拦截器
我们在构造RestAdapter时,是可以设置自定义的拦截器,只需要实现RequestInterceptor接口。通过拦截器我们可以在请求Api之前向head、path、query中添加参数,来满足我们对一些公共参数的添加。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
我们发现这个回调返回的是一个RequestFacade类型的,我们看看
RequestFacade接口是怎么定义的:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
这个接口定义了向head、path、query中添加参数的接口,并且可以通过getMethodInfo()得到方法的注解信息。
Converter
框架默认实现的是到Gson的转换,如果我们的数据是别的Json解析方式或是xml解析方式,我们就需要自定义converter,先看下Converter接口的定义:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
我们看看TypedInput:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
TypedInput给我们返回了mime类型、数据长度和输入流供我们解析。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
而TypedOutput则是给我们提供向服务器发送数据的输出流,我们将对象的(Json)字符串写入到输出流中。
而我们自定义Converter时,只需处理POJO和标准的TypedInput、TypedOutput的转换操作即可:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
以上就是我们平常会在项目中用到的retrofit的全部内容,是不是很简单呢?使用简单,意味着框架为我们做了很多事情。下一篇博客我们将主要介绍retrofit的实现原理。
- Retrofit使用大全
- Retrofit使用
- Retrofit使用
- Retrofit使用
- Retrofit使用
- Retrofit使用
- Retrofit使用
- Retrofit使用
- 【Retrofit 】Retrofit 基本使用教程
- 《Retrofit系列》Retrofit的基本使用
- 【Android】Retrofit的使用(1)-Retrofit介绍
- Retrofit框架使用笔记
- Retrofit 2 使用教程
- retrofit使用注意事项
- Retrofit 的使用
- retrofit 的使用。
- 使用Retrofit请求API
- Retrofit 基本使用教程
- 学习Opencv 2.4.9(二) ---操作像素
- 字符串
- 洛谷P1941 飞扬的小鸟
- final关键字
- 计数排序的简单实现
- Retrofit使用大全
- C++ 模板函数 和 模板类
- Android实战技巧:如何在ListView中嵌套ListView(转)
- ACM 1087 Super Jumping! Jumping! Jumping!
- jQuery制作幻灯片(轮播图)
- 2017/08/24 Jsp内置对象
- 十二 iOS之 图片擦除
- 大数据学习路线
- EasyUi+mvc增删改查