Volley

OkHttp可以作为Volley底层传输协议,速度更快,传大量图片建议使用。OkHttp更多功能请看**OkHttp的使用**

xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...

xUtils一共有4大功能:注解模块,网络模块,图片加载模块,数据库模块。相关请看**xUtils框架的使用**博客

使用Volley上传,猪哟是继承volley的Request类,然后通过使用httpmim的MultipartEntity类对文件参数进行封装。

Volley更多功能请看**Volley框架使用**

所需的jar包:

httpclient-4.3.5.jarandroid-async-http-1.4.4.jar

httpcore-4.3.2.jar,        httpmime-4.3.5

okhttp.jarokio.jarvolley.jar,****xUtils-2.6.2.jar

OkHttp代码:

1private static final Handler handler = new Handler(Looper.getMainLooper()); 2 3private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/*"); 4 5private static final OkHttpClient client = new OkHttpClient.Builder() 6 .addInterceptor(new Interceptor() { 7 @Override 8 public Response intercept(Chain chain) throws IOException { 9 okhttp3.Request request = chain.request().newBuilder() 10 .build(); 11 return chain.proceed(request); 12 } 13 }).readTimeout(15, TimeUnit.SECONDS)// 设置读取超时时间 14 .writeTimeout(15, TimeUnit.SECONDS)// 设置写的超时时间 15 .connectTimeout(15, TimeUnit.SECONDS)// 设置连接超时时间 16 .build(); 17 18// 上传图片公有方法 19private final static void uploadImgAndParameter(Map<String, Object> map, 20 String url) { 21 22 // mImgUrls为存放图片的url集合 23 MultipartBody.Builder builder = new MultipartBody.Builder() 24 .setType(MultipartBody.FORM); 25 26 if (null != map) { 27 for (Map.Entry<String, Object> entry : map.entrySet()) { 28 if (entry.getValue() != null) { 29 if (entry.getValue() instanceof File) { 30 File f = (File) entry.getValue(); 31 builder.addFormDataPart(entry.getKey(), f.getName(), 32 RequestBody.create(MEDIA_TYPE_PNG, f)); 33 } else { 34 builder.addFormDataPart(entry.getKey(), entry 35 .getValue().toString()); 36 } 37 } 38 39 } 40 } 41 // 创建RequestBody 42 RequestBody body = builder.build(); 43 final okhttp3.Request request = new okhttp3.Request.Builder().url(url)// 地址 44 .post(body)// 添加请求体 45 .build(); 46 client.newCall(request).enqueue(new okhttp3.Callback() { 47 48 @Override 49 public void onResponse(Call call, final Response response) 50 throws IOException { 51 final String data = response.body().string(); 52 Log.i(TAG, "上传照片成功-->" + data); 53 call.cancel();// 上传成功取消请求释放内存 54 } 55 56 @Override 57 public void onFailure(Call call, final IOException e) { 58 Log.i(TAG, "上传失败-->" + e.getMessage()); 59 call.cancel();// 上传失败取消请求释放内存 60 } 61 62 }); 63 64}

XUtils:

1HttpUtils http = new HttpUtils(); 2 RequestParams params = new RequestParams(); 3 params.addBodyParameter("c", "comment"); 4 params.addBodyParameter("a", "add"); 5 params.addBodyParameter("uid", "1000191"); 6 params.addBodyParameter("dataid", "1114"); 7 params.addBodyParameter("message", "你好"); 8 params.addBodyParameter("datatype", "goodsid"); 9 for (int i = 0; i < 2; i++) { 10 params.addBodyParameter("filedata" + i, file[i]); 11 } 12 http.send(HttpRequest.HttpMethod.POST, url, params, 13 new RequestCallBack<String>() { 14 15 @Override 16 public void onFailure(HttpException arg0, String arg1) { 17 18 } 19 20 @Override 21 public void onSuccess(ResponseInfo<String> arg0) { 22 Log.i(TAG, arg0.result.toString()); 23 } 24 25 });

Volley:

1public static void addPutUploadFileRequest(final Map<String, File> files, 2 final Map<String, String> params, 3 final Listener<String> responseListener, 4 final ErrorListener errorListener) { 5 if (null == url || null == responseListener) { 6 return; 7 } 8 9 MultiPartStringRequest multiPartRequest = new MultiPartStringRequest( 10 Request.Method.POST, url, responseListener, errorListener) { 11 12 @Override 13 public Map<String, File> getFileUploads() { 14 return files; 15 } 16 17 @Override 18 public Map<String, String> getStringUploads() { 19 return params; 20 } 21 22 }; 23 24 mSingleQueue.add(multiPartRequest); 25 } 26 27 Listener<JSONObject> mResonseListener = new Listener<JSONObject>() { 28 29 @Override 30 public void onResponse(JSONObject response) { 31 Log.i(TAG + "1", response.toString()); 32 } 33 }; 34 35 Listener<String> mResonseListenerString = new Listener<String>() { 36 37 @Override 38 public void onResponse(String response) { 39 Log.i(TAG + "2", response.toString()); 40 } 41 }; 42 43 ErrorListener mErrorListener = new ErrorListener() { 44 45 @Override 46 public void onErrorResponse(VolleyError error) { 47 if (error != null) { 48 if (error.networkResponse != null) 49 Log.i(TAG + "3", " error " 50 + new String(error.networkResponse.data)); 51 } 52 } 53 };

不要忘记在AndroidManifest.xml加权限哦!

1 <uses-permissionandroid:name="android.permission.INTERNET"/> 2 3 <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

本人测试全部成功了的

由于代码太多,完整代码未给出,源码直接下载即可

源码点击下载:  https://github.com/DickyQie/android-picture-upload

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )