Android okhttp上传图片文件
来源:互联网 发布:viso 网络拓扑图图标 编辑:程序博客网 时间:2024/05/22 03:18
之前在开发当中使用过的网络请求框架Volley、Xutils、async http等,而最近目前最流行的应该是okhttp,网上有很多封装好的工具类,但是发现对图片文件上传的不多,我也是第一次使用okhttp,项目当中有多图片上传的需求,而网上给出的工具类几乎没有对图片文件处理的,最后参考别人的例子才发现媒体文件上传需要重写MultipartBody这个类,其实我发现在之前的项目中使用的volley框架也是如此,对于okhttp上传图片我是这么写的:
Map<String, String> params=new HashMap<>(); //参数 params.put("uid", BaseAppliction.newInstance().getBaseSp().getUid() + ""); params.put("task_id", GetID.taskid + ""); params.put("task_order", GetID.task_order + ""); params.put("utype", BaseAppliction.newInstance().getBaseSp().getUtype() + ""); params.put("remarks", ed_message.getText().toString()); //重写MultipartBody类 MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder(); multipartBodyBuilder.setType(MultipartBody.FORM); //遍历map中所有参数到builder,为什么会有折磨多的if判断呢,因为后台不支持数组和集合上传所以只能一个个的加判断了,哎都是泪 //参数说明:GetImageFile里面存放的是图片的路径,img1,img2,img3:分别代表第一二三张图片的参数 if (params != null) { for (String key : params.keySet()) { multipartBodyBuilder.addFormDataPart(key, params.get(key)); } if (GetImageFile.list.size() == 1) {//如果上传一张 if (GetImageFile.list.get(0) != null) { File f = new File(GetImageFile.list.get(0)); multipartBodyBuilder.addFormDataPart("img1", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); } } if (GetImageFile.list.size() == 2) {//如果上传两张 if (GetImageFile.list.get(0) != null & GetImageFile.list.get(1) != null) { File f = new File(GetImageFile.list.get(0)); multipartBodyBuilder.addFormDataPart("img1", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); File f1 = new File(GetImageFile.list.get(1)); multipartBodyBuilder.addFormDataPart("img2", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f1)); } } if (GetImageFile.list.size() == 3) {//如果上传三张 if (GetImageFile.list.get(0) != null & GetImageFile.list.get(1) != null & GetImageFile.list.get(2) != null) { File f = new File(GetImageFile.list.get(0)); multipartBodyBuilder.addFormDataPart("img1", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); File f1 = new File(GetImageFile.list.get(1)); multipartBodyBuilder.addFormDataPart("img2", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f1)); File f2 = new File(GetImageFile.list.get(2)); multipartBodyBuilder.addFormDataPart("img3", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f2)); } } } //构建请求体 RequestBody requestBody = multipartBodyBuilder.build(); Request.Builder RequestBuilder = new Request.Builder(); RequestBuilder.url(url);// 添加URL地址 RequestBuilder.post(requestBody); Request request = RequestBuilder.build(); OkHttpClient mOkHttpClient = new OkHttpClient(); mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { call.cancel(); } @Override public void onResponse(Call call, Response response) throws IOException { String str = response.body().string(); System.out.println(str); call.cancel(); /**注意为什么会有一个Thread:这可是一个同步操作,不是异步的啊,假如你想在数据请求成功后,也就是表单提交成功后 * 你想 Toast.makeText(this,"上传成功",Toast.LENGTH_SHORT).show(); 会直接抛出异常,所以创建一个线程外边接受handler * toast就行了 */ new Thread(new Runnable() { @Override public void run() { Message message = new Message(); message.what = tag; handler.sendMessage(message); } }).start(); } });
阅读全文
0 0
- Android okhttp上传图片文件
- Android okHttp图片上传
- android 使用OkHttp上传多张图片
- android 使用OkHttp上传多张图片
- android 使用OkHttp上传多张图片
- Android okhttp带参数上传单张图片
- Android OkHttp 结合php 多图片上传
- Android 使用OKhttp 3.0以上版本上传文件或图片(MultipartBuilder已不可用)
- android OkHttp上传文件,selvelt服务端
- android Retrifit2.0+OKHttp文件上传
- android OkHttp 上传文件附带参数
- Android OkHttp 文件上传和下载
- 使用Okhttp上传图片
- 使用OkHttp上传图片
- Okhttp实现上传图片
- OKhttp上传图片
- Okhttp上传图片
- 使用OkHttp上传图片
- /etc/fstab文件中的参数
- JavaScript垃圾回收概述
- 第十周 项目4
- spring cloud 随笔记录
- Spark源码分析之BlockManager
- Android okhttp上传图片文件
- 01、UIPickerView-案例2
- 系统项目源码
- git 中 gitignore使用
- Scrapy运行ImportError: No module named win32api错误
- 算法分析与设计论文
- 如何使用linux 的crontab 启动python 脚本
- 欢迎使用CSDN-markdown编辑器
- Spark源码分析之BlockManager通信机制