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

来源:互联网 发布:mac屏幕下方白条 编辑:程序博客网 时间:2024/06/08 16:56

最近的后台接口要求:

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);}





原创粉丝点击