Retrofit2.0 公共参数详解与Interceptor应用

0 下载量 20 浏览量 更新于2024-08-28 收藏 77KB PDF 举报
本文主要讲解了如何在Retrofit2.0中处理公共参数(固定参数),尤其是在那些需要对所有网络请求统一添加固定参数的情况下。Retrofit2.0原版中没有直接提供设置公共参数的方法,但可以通过实现RequestInterceptor接口来实现这个功能。 在Retrofit的配置过程中,创建RestAdapter时,可以通过`.setRequestInterceptor()`方法添加自定义的RequestInterceptor。RequestInterceptor是一个拦截器接口,它允许我们在请求发送前进行操作,比如添加或修改请求头或查询参数。下面是一个示例: ```java RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(ctx) // 设置API的基URL .setRequestInterceptor(new RequestInterceptor() { @Override public void intercept(RequestFacade request) { // 添加公共参数,如查询参数 request.addQueryParam("publicParams", "1"); } }) .setConverter(new BaseConverterFactory()) // 设置数据转换器 .build(); ``` 如果你想要封装公共参数,如API密钥和密钥,可以创建一个单独的Interceptor实现类,如`CommonInterceptor`,并重写`intercept()`方法: ```java public class CommonInterceptor implements Interceptor { private final String mApiKey; private final String mApiSecret; public CommonInterceptor(String apiKey, String apiSecret) { mApiKey = apiKey; mApiSecret = apiSecret; } @Override public Response intercept(Chain chain) throws IOException { // 计算 Marvel Hash(这里假设是基于API密钥和密钥的某种哈希算法) String marvelHash = ApiUtils.generateMarvelHash(mApiKey, mApiSecret); // 获取原始请求 Request oldRequest = chain.request(); // 创建新的请求,包含公共参数和计算后的Marvel Hash Request newRequest = oldRequest.newBuilder() .addHeader("Authorization", "Bearer " + marvelHash) .build(); return chain.proceed(newRequest); // 发送带有公共参数的请求 } } ``` 将这个`CommonInterceptor`添加到RestAdapter的构建过程中,确保所有通过Retrofit发起的请求都会自动包含这些公共参数。这样,即使在Retrofit2.0中没有直接的公共参数设置方法,通过Interceptor机制,我们仍能灵活地管理全局的请求配置。