Okhttp之FormBody

FormBody继承抽象类RequestBody

它的CONTENT_TYPE是一个静态常量

 private static final MediaType CONTENT_TYPE = MediaType.get("application/x-www-form-urlencoded");

里面还有一个内部类Builder

 public static final class Builder {
    private final List<String> names = new ArrayList<>();
    private final List<String> values = new ArrayList<>();
    private final Charset charset;

    public Builder() {
      this(null);
    }

    public Builder(Charset charset) {
      this.charset = charset;
    }

    public Builder add(String name, String value) {
      if (name == null) throw new NullPointerException("name == null");
      if (value == null) throw new NullPointerException("value == null");

      names.add(HttpUrl.canonicalize(name, FORM_ENCODE_SET, false, false, true, true, charset));
      values.add(HttpUrl.canonicalize(value, FORM_ENCODE_SET, false, false, true, true, charset));
      return this;
    }

    public Builder addEncoded(String name, String value) {
      if (name == null) throw new NullPointerException("name == null");
      if (value == null) throw new NullPointerException("value == null");

      names.add(HttpUrl.canonicalize(name, FORM_ENCODE_SET, true, false, true, true, charset));
      values.add(HttpUrl.canonicalize(value, FORM_ENCODE_SET, true, false, true, true, charset));
      return this;
    }

    public FormBody build() {
      return new FormBody(names, values);
    }
  }

所以可以这样使用:

public void doPost(String url, Map<String, String> params, Callback callback) {

        FormBody.Builder builder = new FormBody.Builder();
        //遍历集合,,,map集合遍历方式
        for (String key : params.keySet()) {
            builder.add(key, params.get(key));
        }

        //创建Request....formBody...new formBody.Builder()...add()....build()
        Request request = new Request.Builder().url(url).post(builder.build()).build();

        Call call = okHttpClient.newCall(request);
        call.enqueue(callback);
    }

 

OkHttp是一个开源的HTTP客户端库,用于发送和接收HTTP请求。它提供了一系列易于使用的方法来创建和配置HTTP客户端。下面是一些关于OkHttp的常见用法: 1. 创建OkHttpClient实例:可以使用默认的构造函数来创建一个默认配置的OkHttpClient实例,也可以使用OkHttpClient.Builder()方法来逐步配置一个OkHttpClient实例,还可以使用现有实例的newBuilder()方法进行构造。例如,可以使用以下代码创建一个默认配置的OkHttpClient实例: ``` OkHttpClient client = new OkHttpClient(); ``` 2. 发送POST请求:OkHttp也可以通过POST方式将键值对数据发送到服务器。可以使用FormBody.Builder()方法创建一个表单数据的RequestBody,然后将其添加到Request.Builder()中的post()方法中。以下是一个示例代码: ``` OkHttpClient client = new OkHttpClient(); String post(String url, String json) throws IOException { RequestBody formBody = new FormBody.Builder() .add("platform", "android") .add("name", "bug") .add("subject", "XXXXXXXXXXXXXXX") .build(); Request request = new Request.Builder() .url(url) .post(formBody) .build(); Response response = client.newCall(request).execute(); if (response.isSuccessful()) { return response.body().string(); } else { throw new IOException("Unexpected code " + response); } } ``` 3. 设置和读取HTTP头部:可以使用Request.Builder()的header()方法来设置HTTP请求的头部信息,使用response.header()方法来读取响应的头部信息。 综上所述,OkHttp是一个功能强大的HTTP客户端库,可以用于发送和接收HTTP请求。它提供了灵活的配置选项和简洁易用的接口,使得使用HTTP变得更加便捷。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [HTTP客户端连接,选择HttpClient还是OkHttp](https://blog.csdn.net/Dome_/article/details/103977308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [HttpClient、OKhttp、RestTemplate对比](https://blog.csdn.net/cristianoxm/article/details/120943347)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值