okHttp请求公共参数

othttp添加请求公共参数的几种方法

第一种 添加在请求链接尾部
HttpUrl url = original.url().newBuilder() //请求尾部链接
                    .addQueryParameter(VERSION, "")
                    .addQueryParameter(APP_VERSION, "")
                    .addQueryParameter(DEVICE, "")
                    .addQueryParameter(DEVICE_NAME, "android")
                    .addQueryParameter(DEVICE_IMEI, "")
                    .addQueryParameter(OS_VERSION, "")
                    .addQueryParameter(TOKEN, "")
                    .addQueryParameter(DEVICE_ID, "")
                    .build();

Request request = original.newBuilder()
                .method(original.method(), original.body())
                 //添加到请求里
                .url(url)
                .build();
第二种 添加在请求form表单里

最麻烦的一种,一般情况下不会用这种方法

RequestBody formBody = new FormBody.Builder()//form表单
                .add(DEVICE_ID, "")
                .add(CHANNEL, "")
                .add(DEVICE_SERIAL_ID, "")
                .add(MOBILE_OS, "android")
                .add(VERSION, "")
                .add(MEMBER_ID, "")
                .add(MEMBER_TYPE, "")
                .add(TOKEN, "")
                .build();

//默认添加formBody后不能添加新的form表单,需要先将RequestBody转成string去拼接
String postBodyString = bodyToString(original.body());
postBodyString += ((postBodyString.length() > 0) ? "&" : "") + bodyToString(formBody);

Request request = original.newBuilder()
                .method(original.method(), original.body())
                 //添加到请求里
                 //string转回成RequestBody
                .post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"),
                        postBodyString))
                .build();

RequestBody转String的方法

private static String bodyToString(final RequestBody request){
        try {
            final RequestBody copy = request;
            final Buffer buffer = new Buffer();
            if(copy != null)
                copy.writeTo(buffer);
            else
                return "";
            return buffer.readUtf8();
        }
        catch (final IOException e) {
            return "did not work";
        }
    }
第三种 添加在请求head
Request request = original.newBuilder()
                .method(original.method(), original.body())
                .addHeader(DEVICE_ID, "")
                .addHeader(CHANNEL, "")
                .addHeader(DEVICE_SERIAL_ID, "")
                .addHeader(MOBILE_OS, "android")
                .addHeader(VERSION, "")
                .addHeader(MEMBER_ID, "")
                .addHeader(TOKEN, "")
                .addHeader(MEMBER_TYPE, "")
                .build();
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Retrofit和OkHttp一起使用可以方便地处理网络请求。Retrofit是一个RESTful Http客户端,可以通过定义接口的方式来处理网络请求。而OkHttp是一个基于Okio库的Http客户端,它支持同步和异步请求,并提供了连接池、缓存、重定向等功能。因此,结合Retrofit和OkHttp的优点,我们可以创建一个请求公共类,用来处理所有的网络请求。 我们可以首先在公共类中定义一个OkHttpClient对象,用来创建请求的HttpClient。接着,我们可以创建一个Retrofit对象,并指定baseURL以及转化器Factory。由于我们使用的是JSON数据,我们可以使用Gson转换器来处理JSON数据。然后,我们可以定义一个接口,该接口定义了我们需要的所有请求方法。这些请求方法将返回一个Call对象,该对象用于发送异步网络请求以及实现网络请求的取消和排队行为。 在实现具体网络请求的方法时,我们可以使用Retrofit框架提供的注解来定义请求的内容。例如,我们可以使用@GET注解来定义一个GET请求,使用@Path和@Query注解来添加路径和查询参数。我们还可以使用@FormUrlEncoded注解来定义表单请求,@Part注解来定义文件上传等多种请求方式。 最后,我们可以在请求公共类中封装一些通用的请求参数,如请求头、超时时间、日志等,以便于我们在具体的网络请求中进行统一的管理。 通过以上步骤,我们可以创建一个请求公共类,使得我们可以快速方便地创建任何网络请求。这样,我们可以极大地提高我们的开发效率,同时也降低了我们代码的维护和重复代码量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值