Android OkHttp Post上传文件并且携带参数实例详解

Android OkHttp Post上传文件并且携带参数

这里整理一下 OkHttp 的 post 在上传文件的同时,也要携带请求参数的方法。

使用 OkHttp 版本如下:

compile 'com.squareup.okhttp3:okhttp:3.4.1'

代码如下:

protected void post_file(final String url, final Map<String, Object> map, File file) { OkHttpClient client = new OkHttpClient(); // form 表单形式上传 MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM); if(file != null){ // MediaType.parse() 里面是上传的文件类型。 RequestBody body = RequestBody.create(MediaType.parse("image/*"), file); String filename = file.getName(); // 参数分别为, 请求key ,文件名称 , RequestBody requestBody.addFormDataPart("headImage", file.getName(), body); } if (map != null) { // map 里面是请求中所需要的 key 和 value for (Map.Entry entry : map.entrySet()) { requestBody.addFormDataPart(valueOf(entry.getKey()), valueOf(entry.getValue())); } } Request request = new Request.Builder().url("请求地址").post(requestBody.build()).tag(context).build(); // readTimeout("请求超时时间" , 时间单位); client.newBuilder().readTimeout(5000, TimeUnit.MILLISECONDS).build().newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.i("lfq" ,"onFailure"); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String str = response.body().string(); Log.i("lfq", response.message() + " , body " + str); } else { Log.i("lfq" ,response.message() + " error : body " + response.body().string()); } } }); }

这里说明一点,就是 MultipartBody.Builder 的 addFormDataPart 方法,是对于之前的 addPart 方法做了一个封装,所以,不需要再去配置 Header 之类的。

如果只是单纯的 Post 携带参数,那么直接使用 FormBody ,代码如下:

FormBody.Builder formBody = new FormBody.Builder(); if (map != null) { for (Map.Entry entry : map.entrySet()) { formBody.add(String.valueOf(entry.getKey()),String.valueOf(entry.getValue())); } }

以上只是针对项目中遇到的问题进行整理,需要了解更多,请自行查阅大神们的解析。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-09-20 06:01:01

Android OkHttp Post上传文件并且携带参数实例详解的相关文章

android使用webview上传文件(相册和拍照)怎么重新选择图片

问题描述 android使用webview上传文件(相册和拍照)怎么重新选择图片 android使用webview上传文件(相册和拍照),第一次选择图片的时候没问题,但第二次选择图片时不能覆盖第一次选择的图片,还是只能上传第一次选择的图片. 解决方案 http://blog.csdn.net/woshinia/article/details/19030437 解决方案二: 在选完照片后把存图片的把集合清空,然后第二次进来的时候重新赋值了 解决方案三: Android使用WebView从相册/拍照

Android 通过httppost上传文本文件到服务器的实例代码_Android

废话不多说了,直接给大家贴关键代码了. /** * 往服务器上上传文本 比如log日志 * @param urlstr 请求的url * @param uploadFile log日志的路径 * /mnt/shell/emulated/0/LOG/LOG.log * @param newName log日志的名字 LOG.log * @return */ public static void httpPost(Activity activity,String urlstr,String uplo

Android将图片上传到php服务器的实例代码

layout中很普通,就是两个button和一个ImageView <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height=&q

Android 通过httppost上传文本文件到服务器的实例代码

废话不多说了,直接给大家贴关键代码了. /** * 往服务器上上传文本 比如log日志 * @param urlstr 请求的url * @param uploadFile log日志的路径 * /mnt/shell/emulated/0/LOG/LOG.log * @param newName log日志的名字 LOG.log * @return */ public static void httpPost(Activity activity,String urlstr,String uplo

javascript实现获取指定精度的上传文件的大小简单实例_javascript技巧

js实现获取指定精度的上传文件的大小,主要采用html和JavaScript,用浏览器运行下述代码,按照操作:选择文件->获得文件大小的顺序,即可. 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>获得文件大小</title> </head> <body> <f

Android自定义进度条的圆角横向进度条实例详解_Android

1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的: invalidate()方法 RectF方法的应用 onMeasure方法的应用 2.原理 画3层圆角矩形,底层为黑色,第二层为灰色,最上一层为进度条颜色,示例图如下: 3.效果图   实现圆角进度条还有很多其他方法,比如在Progress控件里填充圆角图片,通过拉伸图片来达到预想的效果,虽然听起来很简单,但实现起来还是有些麻烦的. 4.解说方法 (1)invalidate()方法 invalidate()是用来刷新

Android自定义进度条的圆角横向进度条实例详解

1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的: invalidate()方法 RectF方法的应用 onMeasure方法的应用 2.原理 画3层圆角矩形,底层为黑色,第二层为灰色,最上一层为进度条颜色,示例图如下: 3.效果图 实现圆角进度条还有很多其他方法,比如在Progress控件里填充圆角图片,通过拉伸图片来达到预想的效果,虽然听起来很简单,但实现起来还是有些麻烦的. 4.解说方法 (1)invalidate()方法 invalidate()是用来刷新Vi

Android 使用PopupWindow实现弹出更多的菜单实例详解

最近想要做一个弹出更多的菜单,而原生的弹出菜单却不是我们想要的效果,所以必然要自定义菜单咯.本人也是借鉴网上的资料进行封装的,感觉还蛮不错的. 原生的菜单如下图: 自定义之后的效果图: 是不是看到这里之后,对比可知,原生的效果不太理想,所以还是再自己定义吧! 1.PopupWindow可以说是一个浮动在Activity之上的容器,通常用来显示自定义的视图.弹出菜单的封装PopMenuMore /** * 对弹出菜单的封装. * http://blog.csdn.net/maosidiaoxian

Android获取arrays.xml里的数组字段值实例详解

Android获取arrays.xml里的数组字段值实例详解 比如在arrays.xml里: <!--leo added for KYLIN-496--> <string-array name="reboot_item"> <item>Reboot</item> <item>Recovery</item> <item>BootLoader</item> </string-array&g