Android中利用volley同时上传文件和文本参数

Android中利用volley同时上传文件和文本参数

前言

在做项目时利用了Volley网络库与服务器之间进行通信,但Volley并没有现成的上传文件的Request可以调用,网上搜索一圈发现很多都是基于HttpClient进行自定义Request封装,可是无奈android 6.0之后移除了HttpClient的代码,只能自己基于HttpURLConnection封装一个Request使用。

继承Request,重写一些方法

由于我的项目中服务器返回的结果都是json格式,所以我自定义一个返回结果是json格式的request,你也可以换成String格式,或者其他你需要的格式。

public class PostUploadRequest extends Request<JSONObject>{
   

public PostUploadRequest(String url, Map<String, String[]> fileMap, Response.Listener<JSONObject> mListener, Response.ErrorListener listener) {
        super(Method.POST, url, listener);
        this.mListener = mListener;
        this.fileMap = fileMap;
        setShouldCache(false);
        setRetryPolicy(new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    }


}

重写parseNetworkResponse()方法

将返回结果转换成json格式

try {
   String je = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
   return Response.success(new JSONObject(je), HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException var3) {
    return Response.error(new ParseError(var3));
} catch (JSONException var4) {
    return Response.error(new ParseError(var4));
}

重写deliverResponse()方法

为请求添加监听回调事件

@Override
    protected void deliverResponse(JSONObject jsonObject) {
        mListener.onResponse(jsonObject);
    }

模仿浏览器上传文件请求

private void buildFilePart(DataOutputStream ds) {
        StringBuilder sb = new StringBuilder();
        Object[] key_arr = fileMap.keySet().toArray();
        for (Object name : key_arr) {
            String[] val = fileMap.get(name.toString());
            String path = val[0];
            String filename = val[1];
            try {
                sb.append(prefix);
                sb.append(boundary);
                sb.append(end)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值