okhttp提交请求body,json或者图片的方式

最近的后台接口要求:

1、post请求,带参数,请求body提交json。

2、post请求提交图片,带参数,表单形式提交图片。

与常规请求参数要求不同,记录一下。

原理:将post参数拼接到url中,json或者表单在添加的时候注明头文件。

0、

public static OkHttpClient sOkHttpClient = new OkHttpClient.Builder()
        .addInterceptor(new Interceptor() {
            public Response intercept(Chain chain) throws IOException {
                Request request = chain.request();
                Response response = chain.proceed(request);
                return response;
            }
        })
        .connectTimeout(4000, TimeUnit.MILLISECONDS)
        .readTimeout(4000, TimeUnit.MILLISECONDS)
        .writeTimeout(4000, TimeUnit.MILLISECONDS)
        .build();

1、

/**
 * 适用于需要传参数和json对象的接口
 * Post 异步请求
 *
 * @param apiId
 * @param map        参数
 * @param jsonString json字符串
 * @param callback   异步回调
 */
public static void asyPostJson(String apiId, Map<String, String> map, String jsonString, Callback callback) {
    if (TextUtils.isEmpty(jsonString)) {
        return;
    }
    MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    RequestBody requestBody = RequestBody.create(JSON, jsonString);
    Log.e("======>>", apiId + " 请求json:" + jsonString);
    String url = apiId +"?";
    if (map != null) {
        // map 里面是请求中所需要的 key 和 value
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry entry : entries) {
            String key = valueOf(entry.getKey());
            String value = valueOf(entry.getValue());
            url = url + "&" + key + "=" + value;
        }
    }
    Log.e("", "============URL============" + apiId + ":" + url);
    Request request = new Request.Builder()
            .url(url)
            .post(requestBody)
            .build();
    sOkHttpClient.newCall(request).enqueue(callback);
}

2、

/**
 * 单图上传方法,供参考
 * 已测试A3033P094与A3033P105接口
 *
 * @param map      参数类似apikey
 * @param file     图片文件
 * @param imagekey 图片key,一般为"image"
 * @param callback
 * @ param url
 */

public static void postFile(final String apiId, final Map<String, String> map, File file, String imagekey, Callback callback) {
    MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
    if (file != null) {
        RequestBody body = RequestBody.create(MediaType.parse("multipart-formdata"), file);
        String filename = file.getName();
        // 参数分别为, 请求key ,文件名称 , RequestBody
        requestBody.addFormDataPart(imagekey, filename, body);
    }
    String url = apiId + "?";
    if (map != null) {
        // map 里面是请求中所需要的 key 和 value
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry entry : entries) {
            String key = valueOf(entry.getKey());
            String value = valueOf(entry.getValue());
            //   requestBody.addFormDataPart(key, value);
            url = url + "&" + key + "=" + value;
        }
    }
    Log.e("==========URL==========", "" + apiId + ":" + url);
    Request request = new Request.Builder().url(url).post(requestBody.build()).build();
    sOkHttpClient.newCall(request).enqueue(callback);

}





©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页