简介
Retrofit是Android中的一种网络请求框架,底层是基于OkHttp实现。(本文全部基于2.0+的版本)
接口全部来自豆瓣api
-
添加依赖
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'
-
创建一个Retrofit实例
public static final String BASE_URL ="https://api.douban.com/v2/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
配置了接口的baseUrl和converter;
这里的baseUrl就是网络请求URL相对固定的地址,一般包括请求协议(如Http)、域名或IP地址、端口号等;
converter转换器,addConverterFactory方法是用什么来解析返回的数据,这里的GsonConverterFactory表示用Gson库来解析返回的json数据。
-
创建业务请求接口
public interface MoviceService {
@GET("movie/top250")
Call getTop250(@Query("start") int start,@Query("count") int count);
}
@GET注解表示get的请求方式,@Query就表示参数,会以Key-Value的方式拼接到url后面。
-
获取接口实例对象
MoviceService moviceService = retrofit.create(MoviceService.class);
-
调用方法,获取一个Call的实例
Call call= moviceService.getTop250(0, 20);
Call在Retrofit就是进行网络请求和处理返回结果的一个类。
-
使用Call的实例完成请求
请求分为两种同步和异步请求
-
同步请求
MovieBean movieBean= call.execute().body();
这里注意的网络请求耗时操作要放到子线程执行,不然会抛出异常。
-
异步请求
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
//成功 do something
MovieBean movieBean = response.body();
}
@Override
public void onFailure(Call call, Throwable t) {
//失败
}
});
到这里就用Retrofit的完成了一次完整的请求,下面让我们来说说get和post请求的参数的标签用法
-
1.GET
- @Query
从上面在完成Retrofit完整的请求就用的使这个标签,这里就不再解释了。
- @QueryMap
当@Query参数比较多的时候,我们就可以用@QueryMap统一用集合的方式进行传递
######创建接口实例
@GET("book/search")
Call
调用的使用把参数统一在map集合中便可
Map options = new HashMap<>();
options.put("q","小王子");
options.put("tag","");
options.put("start","0");
options.put("count","3");
Call
- @Query集合
参数是通过Key-Value的形式进行拼接的,当我们参数名一样,可是值不相同的时候,就可以选用这种。
######创建接口实例
@GET("book/search")
Call
调用的使用把参数值统一在list集合中便可
List list = new ArrayList<>();
//这里是随便写的,只是为了表达。
list.add("小王子");
list.add("哈哈哈");
Call
- @Query非必填
如果请求参数为非必填,有时候即使不传该参数,服务端也可以解析
######创建接口实例
@GET("movie/top250")
Call getTop250s(@Query("start") int start,@Query("count") String count);
######调用的时候传入null即可
```
moviceService.getTop250s(0,null);
```
- @Path
如果请求的是URL的相对地值即https://api.douban.com/v2/book/1125744
@GET("book/{id}")
Call
######调用的时候传入id值即可
```
moviceService.getSearhBook("1125744");
```
到这里get请求的参数标签就完了。
-
2.POST
整理中,马上更新post请求的参数标签用法,和用Retrofit别的一些用法,知识点(上传,下载,拦截器等等)。
ps 如有错误请指点,共勉,谢谢。