Retrofit教程(1)

    xiaoxiao2021-03-25  59

    RxJava 与 Retrofit 结合的最佳实践

    一. 简介

    Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求。[Retrofit github地址](https://github.com/square/retrofit)。[Retrofit官网](http://square.github.io/retrofit/)。

    二. 这里主要介绍get、post、上传、下载

    1.get方法
    1. @Query

    Get方法请求参数都会以key=value的方式拼接在url后面,Retrofit提供了两种方式设置请求参数。第一种就是像上文提到的直接在interface中添加@Query注解,还有一种方式是通过Interceptor实现,直接看如何通过Interceptor实现请求参数的添加。

    public class CustomInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); HttpUrl httpUrl = request.url().newBuilder() .addQueryParameter("token", "tokenValue") .build(); request = request.newBuilder().url(httpUrl).build(); return chain.proceed(request); } }

    addQueryParameter就是添加请求参数的具体代码,这种方式比较适用于所有的请求都需要添加的参数,一般现在的网络请求都会添加token作为用户标识,那么这种方式就比较适合。

    addInterceptor(new CustomInterceptor())
    2. @QueryMap

    如果Query参数比较多,那么可以通过@QueryMap方式将所有的参数集成在一个Map统一传递,还以上文中的get请求方法为例

    public interface BlueService { @GET("book/search") Call<BookSearchResponse> getSearchBooks(@QueryMap Map<String, String> options); }

    调用的时候将所有的参数集合在统一的map中即可

    Map<String, String> options = new HashMap<>(); map.put("q", "小王子"); map.put("tag", null); map.put("start", "0"); map.put("count", "3"); Call<BookSearchResponse> call = mBlueService.getSearchBooks(options);
    3. Query集合

    假如你需要添加相同Key值,但是value却有多个的情况,一种方式是添加多个@Query参数,还有一种简便的方式是将所有的value放置在列表中,然后在同一个@Query下完成添加,实例代码如下:

    public interface BlueService { @GET("book/search") Call<BookSearchResponse> getSearchBooks(@Query("q") List<String> name); }

    最后得到的url地址为

    https://api.douban.com/v2/book/search?q=leadership&q=beyond%20feelings 1
    4. Query非必填

    如果请求参数为非必填,也就是说即使不传该参数,服务端也可以正常解析,请求方法定义处还是需要完整的Query注解,某次请求如果不需要传该参数的话,只需填充null即可。

    针对文章开头提到的get的请求,加入按以下方式调用

    Call<BookSearchResponse> call = mBlueService.getSearchBooks("小王子", null, 0, 3);

    那么得到的url地址为

    https://api.douban.com/v2/book/search?q=
    转载请注明原文地址: https://ju.6miu.com/read-33957.html

    最新回复(0)