美文网首页
Retrofit2.0添加公参

Retrofit2.0添加公参

作者: mocen_王琪 | 来源:发表于2017-06-01 17:06 被阅读325次

在实际项目中,对于有需要统一进行公共参数添加的网络请求,可以使用下面的代码来实现:

  RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint(ctx).setRequestInterceptor(new RequestInterceptor() {
                @Override
                public void intercept(RequestFacade request) {
                    request.addQueryParam("publicParams", "1");
                }
            }).setConverter(new BaseConverter())
            .build();

在RestAdapter的实例化对象的时候,为其指定一个RequestInterceptor接口的实现类即可,在该类中,可以对请求体的相关参数进行设置,如addHeader、addQueryParam等。

不过遗憾的是Retrofit2.0已经没有了该类,该怎么做呢?通过Interceptor实现。

Interceptor是拦截器, 在发送之前, 添加一些参数, 或者获取一些信息。

  /**
 * 封装公共参数(Key和密码)
 * <p>
 */
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(Interceptor.Chain chain) throws IOException {
    String marvelHash = ApiUtils.generateMarvelHash(mApiKey, mApiSecret);
    Request oldRequest = chain.request();

    // 添加新的参数
    HttpUrl.Builder authorizedUrlBuilder = oldRequest.url()
            .newBuilder()
            .scheme(oldRequest.url().scheme())
            .host(oldRequest.url().host())
            .addQueryParameter(MarvelService.PARAM_API_KEY, mApiKey)
            .addQueryParameter(MarvelService.PARAM_TIMESTAMP, ApiUtils.getUnixTimeStamp())
            .addQueryParameter(MarvelService.PARAM_HASH, marvelHash);

    // 新的请求
    Request newRequest = oldRequest.newBuilder()
            .method(oldRequest.method(), oldRequest.body())
            .url(authorizedUrlBuilder.build())
            .build();

    return chain.proceed(newRequest);
  }
}

Okhttp3使用了装饰者模式, 使用Builder添加Interceptor。

CommonInterceptor commonInterceptor = new CommonInterceptor(
            "key", "Secret");

OkHttpClient client = new OkHttpClient.Builder()
            .addInterceptor(commonInterceptor)
            .build();

 // 适配器
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("url")             
    .addConverterFactory(GsonConverterFactory.create()
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    .client(client)
    .build();

相关文章

  • Retrofit2.0添加公参

    在实际项目中,对于有需要统一进行公共参数添加的网络请求,可以使用下面的代码来实现: 在RestAdapter的实例...

  • ffmpeg Mac 硬件加速参数

    入参添加:-hwaccel videotoolbox 出参添加:-vcodec h264_videotoolbox...

  • Java有参构造方法和无参构造方法

    1、定义: 编写一个类时没有添加无参构造方法,那么编译器会自动添加无参构造方法;(如果自己添加构造函数,无论有参数...

  • Gitee免密推送和拉取

    生成/添加SSH公钥 访问gitee.com官网,添加SSH公钥 验证是否成功 本地添加帐号

  • 注解的简单用例

    1,定义注解类 2,在形参中添加注解约束@SmsType String type 3,在实现中,形参不需要添加注解...

  • Retrofit2.0添加Header的方法总结

    一、使用注解 1. 添加单个header 2. 添加多个header 3. 动态添加header 二、如果要添加全...

  • JavaEE学习day-56:OA项目(2)

    一、添加员工 1.封装实体类: 生成get和set方法,有参构造和无参构造。 2.数据访问层: 在Dao层添加“添...

  • 【报错】GitLab: Deploy key not allow

    公钥添加的位置不对, 不要在项目中添加, 应该在个人设置中添加, 在项目中添加公钥只能pull无法push 参考链...

  • 在参公的路上

    距离国考还有70多天,迷茫,还是迷茫。 经常想写点什么:却不知道从哪里说起,那就从今天开始吧: 马上要毕业...

  • git远程秘钥设置

    1、生成公私钥对 2、绑定公钥 将公钥添加到github网站内获取公钥 将公钥串添加到setting->SSH a...

网友评论

      本文标题:Retrofit2.0添加公参

      本文链接:https://www.haomeiwen.com/subject/goeefxtx.html