android volley 图片上传,Volley-XUtils-OkHttp三种方式实现单张多张图片上传

本文探讨了OkHttp如何作为Volley的底层传输协议以提升网络请求速度,特别适合大量图片上传。同时介绍了XUtils的多功能特性,包括四大模块:注解、网络、图片加载和数据库。文中提供了OkHttp上传图片的示例代码,并与Volley的文件上传方法进行了对比。最后,提到了在AndroidManifest.xml中添加必要权限的重要性。
摘要由CSDN通过智能技术生成

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

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

xUtils一共有4大功能:注解模块,网络模块,图片加载模块,数据库模块。相关请看

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

Volley更多功能请看

所需的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 map,

String url) {

// mImgUrls为存放图片的url集合

MultipartBody.Builder builder = new MultipartBody.Builder()

.setType(MultipartBody.FORM);

if (null != map) {

for (Map.Entry 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() {

@Override

public void onFailure(HttpException arg0, String arg1) {

}

@Override

public void onSuccess(ResponseInfo arg0) {

Log.i(TAG, arg0.result.toString());

}

});

Volley:

public static void addPutUploadFileRequest(final Map files,

final Map params,

final Listener responseListener,

final ErrorListener errorListener) {

if (null == url || null == responseListener) {

return;

}

MultiPartStringRequest multiPartRequest = new MultiPartStringRequest(

Request.Method.POST, url, responseListener, errorListener) {

@Override

public Map getFileUploads() {

return files;

}

@Override

public Map getStringUploads() {

return params;

}

};

mSingleQueue.add(multiPartRequest);

}

Listener mResonseListener = new Listener() {

@Override

public void onResponse(JSONObject response) {

Log.i(TAG + "1", response.toString());

}

};

Listener mResonseListenerString = new Listener() {

@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加权限哦!

本人测试全部成功了的

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值