Retrofit2 封裝統一請求引數
阿新 • • 發佈:2019-02-16
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();
}