[Android]使用Okhttp3进行POST提交JSON数据

发布于 2020-07-07  161 次阅读


起因

之前在做的项目中需要对接一个智能床垫设备.设备使用SmartLink技术连接WIFI,然后APP需要从设备厂商的服务器中获取需要的数据,也就是调用设备厂商服务器的接口.

初拿到接口文档,看到接口需要的是JSON数据时,都不知道是个什么东西(基础太差).后来才总算明白,原来就像是上传文件一样的,只不过是上传文件是流,而JSON请求是JSON字符串而已.

操作

  1. 获取MediaType对象,MINI类型为application/json,字符集为utf-8.
  2. 通过RequestBody.create()方法创建JSON请求主体.
  3. 创建请求对象,需要往请求头里添加参数也是在这里添加.
  4. 执行请求.完成.
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
//创建一个OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
//创建一个RequestBody(参数1:数据类型 参数2传递的json串)
RequestBody requestBody = RequestBody.create(JSON, json);
//创建一个请求对象
Request request = new Request.Builder()
        .url(url)
        .addHeader("v", "1.6")
        .post(requestBody)
        .build();
//发送请求获取响应
okHttpClient.newCall(request).enqueue(new Callback() {

    @Override
    public void onResponse(Call arg0, Response response) throws IOException {
        // 判断请求是否成功
        if(response.isSuccessful()){
            String ret = response.body().string();
            //打印服务端返回结果
            Log.i("mo--",ret);
        }
    }

    @Override
    public void onFailure(Call arg0, IOException arg1) {
        // 请求失败
        Log.i("mo--",arg1.getMessage());
        arg1.printStackTrace();
    }
});

做一只特立独行的猪