Volley-XUtils-OkHttp三种方式实现单张多张图片上传
2016-10-24 11:33
435 查看
Volley更多功能请看Volley框架使用
所需的jar包:
httpclient-4.3.5.jar,android-async-http-1.4.4.jar
httpcore-4.3.2.jar, httpmime-4.3.5
okhttp.jar,okio.jar,volley.jar,xUtils-2.6.2.jar
OkHttp:
XUtils:
Volley:
不要忘记在AndroidManifest.xml加权限哦!
本人测试全部成功了的
由于代码太多,完整代码未给出,源码直接下载即可
源码点击下载: https://github.com/DickyQie/android-picture-upload
所需的jar包:
httpclient-4.3.5.jar,android-async-http-1.4.4.jar
httpcore-4.3.2.jar, httpmime-4.3.5
okhttp.jar,okio.jar,volley.jar,xUtils-2.6.2.jar
OkHttp:
private static final Handler handler = new Handler(Looper.getMainLooper()); private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/*"); private static final OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { okhttp3.Request request = chain.request().newBuilder() .build(); return chain.proceed(request); } }).readTimeout(15, TimeUnit.SECONDS)// 设置读取超时时间 .writeTimeout(15, TimeUnit.SECONDS)// 设置写的超时时间 .connectTimeout(15, TimeUnit.SECONDS)// 设置连接超时时间 .build(); // 上传图片公有方法 private final static void uploadImgAndParameter(Map<String, Object> map, String url) { // mImgUrls为存放图片的url集合 MultipartBody.Builder builder = new MultipartBody.Builder() .setType(MultipartBody.FORM); if (null != map) { for (Map.Entry<String, Object> entry : map.entrySet()) { if (entry.getValue() != null) { if (entry.getValue() instanceof File) { File f = (File) entry.getValue(); builder.addFormDataPart(entry.getKey(), f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); } else { builder.addFormDataPart(entry.getKey(), entry .getValue().toString()); } } } } // 创建RequestBody RequestBody body = builder.build(); final okhttp3.Request request = new okhttp3.Request.Builder().url(url)// 地址 .post(body)// 添加请求体 .build(); client.newCall(request).enqueue(new okhttp3.Callback() { @Override public void onResponse(Call call, final Response response) throws IOException { final String data = response.body().string(); Log.i(TAG, "上传照片成功-->" + data); call.cancel();// 上传成功取消请求释放内存 } @Override public void onFailure(Call call, final IOException e) { Log.i(TAG, "上传失败-->" + e.getMessage()); call.cancel();// 上传失败取消请求释放内存 } }); }
XUtils:
HttpUtils http = new HttpUtils(); RequestParams params = new RequestParams(); params.addBodyParameter("c", "comment"); params.addBodyParameter("a", "add"); params.addBodyParameter("uid", "1000191"); params.addBodyParameter("dataid", "1114"); params.addBodyParameter("message", "你好"); params.addBodyParameter("datatype", "goodsid"); for (int i = 0; i < 2; i++) { params.addBodyParameter("filedata" + i, file[i]); } http.send(HttpRequest.HttpMethod.POST, url, params, new RequestCallBack<String>() { @Override public void onFailure(HttpException arg0, String arg1) { } @Override public void onSuccess(ResponseInfo<String> arg0) { Log.i(TAG, arg0.result.toString()); } });
Volley:
public static void addPutUploadFileRequest(final Map<String, File> files, final Map<String, String> params, final Listener<String> responseListener, final ErrorListener errorListener) { if (null == url || null == responseListener) { return; } MultiPartStringRequest multiPartRequest = new MultiPartStringRequest( Request.Method.POST, url, responseListener, errorListener) { @Override public Map<String, File> getFileUploads() { return files; } @Override public Map<String, String> getStringUploads() { return params; } }; mSingleQueue.add(multiPartRequest); } Listener<JSONObject> mResonseListener = new Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.i(TAG + "1", response.toString()); } }; Listener<String> mResonseListenerString = new Listener<String>() { @Override public void onResponse(String response) { Log.i(TAG + "2", response.toString()); } }; ErrorListener mErrorListener = new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (error != null) { if (error.networkResponse != null) Log.i(TAG + "3", " error " + new String(error.networkResponse.data)); } } };
不要忘记在AndroidManifest.xml加权限哦!
<uses-permissionandroid:name="android.permission.INTERNET"/> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
本人测试全部成功了的
由于代码太多,完整代码未给出,源码直接下载即可
源码点击下载: https://github.com/DickyQie/android-picture-upload
相关文章推荐
- Volley-XUtils-OkHttp三种方式实现单张多张图片上传
- Volley-XUtils-OkHttp三种方式实现单张多张图片上传
- okhttp2 和 okhttp 3上传单张或者多张图片的差异( 更好地理解使用okhttp )
- iOS用ASIHTTPRequest框架实现多张图片上传
- 使用原始的HTTP拼凑请求的方式上传多张图片
- 使用Vue实现图片上传的三种方式
- Volley学习(五)HttpUrlConnection、Volley 2种方式实现头像上传
- as3+php上传图片的三种方式
- java三种方式实现文件的上传
- .NET自定义多文件(图片)上传的实现方式
- 上传头像进行裁剪——jQuery + HttpHandler 实现图片裁剪(适用于论坛, SNS)【转】
- Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传
- HTTP 通信, 三种方式XML 解析,并通过 Hander 实现异步消息处理
- ASP.NET(C#)实现一次性上传多张图片(多个文件)
- java struts中实现上传多张图片代码
- jquery_file_upload in Rails(ajax实现多张图片上传)
- as3+php上传图片的三种方式
- ASP.NET(C#)实现一次性上传多张图片(多个文件)
- input file实现多张图片上传
- ASP.NET(C#)实现一次性上传多张图片(多个文件)