Retrofit使用介绍。
About Retrofit
项目的主页在这里:http://square.github.io/retrofit/
如何使用
非常简单,分为以下几步:
i. 添加依赖和权限
首先需要在 build.gradle 文件中添加依赖,在 Manifest.xml文件中添加所需的网络权限。
//build.gradle
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
// AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
ii.创建Retrofit实例
创建Retrofit实例时需要通过Retrofit.Builder,并调用baseUrl方法设置URL。
注: Retrofit2 的baseUlr 必须以 /(斜线) 结束。
Retrofit mRetrofit= new Retrofit.Builder()
.baseUrl("https://api.github.com")
.build();
iii.将http接口转换为Java API接口
比如我们想要从下面的URL中获取数据
https://api.github.com/users/yishuihe
那么,我们就需要将其转换成Java API:
public interface APIInterface {
@GET("/users/{user}") //这里的{user} 表示是一个变量
Call<ResponseBody> getUserInfo(@Path("user") String user); /*这里的user表示的是上面的{id}
}
在这里,http路径并不完整,我们只提供了/user/{user},这是因为在构造 Retrofit 对象时会添加一个 baseUrl(https://api.github.com)。
在此处 GET 的意思是 发送一个 GET请求,请求的地址为:baseUrl + “/users/{user}”。
{user} 类似于占位符的作用,具体类型由 getUserInfo(@Path(“user”) String user) 指定,这里表示 {user} 将是一段字符串。
其中,retrofit提供的与请求方法相关的注解有 @GET、@POST、@HEAD、@PUT、@DELETA、@PATCH,和参数相关的@Path、@Field、@Multipart等。
iv.创建API接口对象
需要注意的是,上一步定义的interface不是class,所以我们是无法直接调用该方法,我们需要用Retrofit创建一个代理对象:
APIInterface service = mRetrofit.create(APIInterface.class);
v.接口调用
一切就绪后,我们就要通过retrofit对象来进行网络操作了。传入参数,然后回调中获取结果:
Call<ResponseBody> model = service.getUserInfo("yishuihe");
model.enqueue(new retrofit2.Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
Log.d(TAG, "onResponse:" + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
注意事项
- retrofit2相对于1有很大的改变,主要在引入包的时候要确认引入的是2,而且使用2中的方法。关于其演进过程,可以看看作者自己的解析.
Gsonformat
作用:Android studio插件,一般接口返回数据后要建立自己的bean,Gsonformat帮助你快速生成,不用一条一条去写。比jsonschema2pojo更加简单。
安装步骤:Android studio-Settings-Plugins-搜Gsonformat-Install Plugin
效果预览:
GET详细解析
服务器接口有很多中,本人经验有限,目前接触较多为以下几种:
直接请求型
即直接对某一地址或组合某一地址发起请求
如:对/result和/result/{id}发起GET请求,其中{id}中的id在实际使用时填写实际值即可.
带参查询型
对某一地址进行带参查询请求
如:https://www.baidu.com/s?wd=123为对接口https://www.baidu.com/s进行参数为wd=123的GET查询请求.
带Header型
即请求时要求带上Header
Retrofit中如何写?
直接请求型
1.如果是直接请求某一地址,写法如下:
@GET(“/record”)
Call
2.如果是组合后直接请求,如/result/{id}写法如下:
@GET(“/result/{id}”)
Call
带参查询型
@GET(“/otn/lcxxcx/query”)
Call
@Query(“from_station”) String from, @Query(“to_station”) String to)
带Header型
比如要更新某个账户信息,其接口地址为/info,需要带的Header有设备信息device,系统版本version,还要带请求参数要更新账户的id,代码如下:
@POST(“/info”)
Call