1. 程式人生 > >Retrofit2 封裝統一請求引數

Retrofit2 封裝統一請求引數

Android http請求中,通常每個request都有相同的引數,比如,token,uid等等,如何能一次性封裝這些重複引數呢

本文的目的就是解決重複封裝的梗,而解決這個問題的主要助手就是Interceptor(攔截器)

  • 自定義Interceptor
public class BaseInterceptor implements Interceptor {   
 @Override    
public Response intercept(Chain chain) throws IOException { 
       Request original = chain.request();    
//新增請求引數,此處是以豆瓣api為例,下面會貼出Base_url
HttpUrl url=original.url().newBuilder() .addQueryParameter("count", "5") .addQueryParameter("start", "0") .build(); //新增請求頭 Request request = original.newBuilder() .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
) .addHeader("Connection", "keep-alive") .method(original.method(), original.body()) .url(url) .build(); return chain.proceed(request); }}
  • 使用BaseInterceptor
public static final String BASE_URL = "https://api.douban.com/v2/movie/"
; //此類Http工具類 public HttpClient() { OkHttpClient.Builder client = new OkHttpClient.Builder(); client.connectTimeout(5, TimeUnit.SECONDS); client.addInterceptor(new BaseInterceptor()); retrofit = new Retrofit.Builder(). baseUrl(BASE_URL) .client(client.build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); service = retrofit.create(MovieService.class); } - //此類 retrofit api service public interface MovieService { @POST("in_theaters") Observable<BaseResponse<List<MovieResponse>>> getMovie(); }

親測可以使用,返回結果 count=5