OKhttp使用教程,okhttp post 提交JSON数据


前言

昨天开始接手一个小任务,说让我处理一个接口的查询返回数据,最开始的时候,我发现自己很傻逼,还想着自己写一个关于提交的方式,就是自己把拿到的数据封装到head,body当中,做了一早上,我发现好像有点难,不知道怎么处理该问题,但是在最后的时候。我师父过来一看,来一句,okhttp啊 ,你在搞啥子哦。一瞬间,我发现自己好像没有在开发的这条路上,这么好的工具怎么不用呢。对不。下面我就开始介绍一下我昨天整理好的OKHTTP


一、什么是OKHTTP?

Http是现在应用常用的一种交换数据和媒体的网络方式,高效地使用http能让资源加载更快,节省带宽。Okhttp是一个高效的Http客户端,它的特性如下:

  • 支持Http/2,允许所有同一个主机地址的请求共享同一个socket连接
  • 连接池能够减少请求延时
  • 透明的GZIP压缩能够减少响应数据的大小
  • 缓存响应内容,避免一些完全重复的请求

当网络请求出现问题的时候okhttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个ip地址,当第一个ip请求失败时,Okhttp会交替尝试你配置的其他Ip,okhttp使用现代TLS技术初始化新的连接,当握手失败时会回退到TLS1.0

二、使用步骤

1.pom文件示例:

        <!--OK HTTP Client-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.9</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.56</version>
        </dependency>

三.接着我们开始写OKHTTP程序的 post 请求提交JSON格式的数据。

new Thread() {
            @Override
            public void run() {
                // @Headers({"Content-Type:application/json","Accept: application/json"})//需要添加头
                MediaType JSON = MediaType.parse("application/json;charset=utf-8");
                JSONObject json = new JSONObject();
                String URl = "http://www.baidu.com/"
                try {
                    json.put("EngineerId", getString(ShareFile.UID, ""));
                    json.put("EngorderNumber", orderNumber);
                    json.put("PID", pid);
                    json.put("RefundType", RefundType);
                    json.put("RefundReason", reason_text.getText().toString());
                    json.put("RefundImg", str);
                    json.put("RefundVideo", "");
                    json.put("discount", discount);
                    json.put("RefundState", "0");
                    json.put("shopkeeperId", shopkeeperId);
                    json.put("payMoney", ActualPayment);//tuikuanPriceString
                    json.put("refundNum", number);
                    json.put("RefundCategory", RefundCategory);
                    json.put("sidd", oldsidd + "");
                    if (RefundCategory.equals("2")) {
                        json.put("ExchangePID", pid);
                        json.put("ExchangeSidd", sidd + "");
                    } else {
                        json.put("ExchangePID", "");
                        json.put("ExchangeSidd", "");
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
                //申明给服务端传递一个json串
                //创建一个OkHttpClient对象
                OkHttpClient okHttpClient = new OkHttpClient();
                //创建一个RequestBody(参数1:数据类型 参数2传递的json串)
                //json为String类型的json数据
                RequestBody requestBody = RequestBody.create(JSON, String.valueOf(json));
                //创建一个请求对象
//                        String format = String.format(KeyPath.Path.head + KeyPath.Path.waybillinfosensor, username, key, current_timestamp);
                Request request = new Request.Builder()
                        .url(URL)
                        .post(requestBody)
                        .build();

                okHttpClient.newCall(request).enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        //DialogUtils.showPopMsgInHandleThread(Release_Fragment.this.getContext(), mHandler, "数据获取失败,请重新尝试!");
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        String string = response.body().string();
                        Log.i("info",string+"");
                        try {
                            JSONObject json = new JSONObject(string);
                            strddd = json.optString("msg");
                            handler.sendEmptyMessage(0x11);
                            if (json.optString("flag").equals("00")) {
                                finish();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        }.start();


总结

今天就简单写到这里,后面我会继续把这个封装成一个 工具类来使用,后面在持续更新该文章内容。

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用 OkHttp3 发送包含 JSON 数据POST 请求,可以按照以下步骤操作: 1. 创建一个 `OkHttpClient` 实例。 2. 创建一个 `RequestBody` 对象,它包含 JSON 数据。 3. 创建一个 `Request` 对象,它包含请求方法(POST)、URL 和 `RequestBody` 对象。 4. 使用 `OkHttpClient` 实例创建一个 `Call` 对象。 5. 调用 `Call` 对象的 `execute()` 方法或 `enqueue()` 方法发送请求。 下面是一个示例代码: ```java OkHttpClient client = new OkHttpClient(); // JSON 数据 String json = "{\"name\":\"John\", \"age\":30}"; // 创建 RequestBody 对象 RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), json); // 创建 Request 对象 Request request = new Request.Builder() .url("https://www.example.com/api/user") .post(requestBody) .build(); // 创建 Call 对象 Call call = client.newCall(request); // 发送请求并处理响应 Response response = call.execute(); String responseData = response.body().string(); ``` 在上面的代码中,我们首先创建了一个 `OkHttpClient` 实例。然后,我们创建了一个包含 JSON 数据的 `RequestBody` 对象,使用 `MediaType.parse()` 方法指定了请求数据的 MIME 类型为 `application/json`。 接下来,我们创建了一个 `Request` 对象,它包含了请求的 URL、请求方法和请求数据。注意,我们使用 `post()` 方法指定了请求方法为 POST,并将 `RequestBody` 对象传递给了该方法。 最后,我们使用 `OkHttpClient` 实例创建了一个 `Call` 对象,并调用了其 `execute()` 方法发送请求。如果请求成功,我们可以通过 `Response` 对象获取响应数据。在上面的代码中,我们使用 `string()` 方法将响应数据转换为字符串。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值