使用volley并结合HttpClient实现上传文件
来源:互联网 发布:外贸数据网 编辑:程序博客网 时间:2024/05/29 10:43
由于volley默认使用的HttpStack是HttpUrlConnection, 所以我们需要手动指定用HttpClient
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext(), new HttpClientStack(new DefaultHttpClient()));
使用HttpUrlConnection的方式上传文件对body的格式要求较严格, 构造起来较麻烦, 如果实在要用HttpUrlConnection, 可以参考http://www.codejava.net/java-se/networking/upload-files-by-sending-multipart-request-programmatically. 以下是我写的MultipartRequest:
public class MultipartRequest extends Request { private Response.Listener mListener; private HttpEntity mEntity; public MultipartRequest(Map<String, String> textBodyParamMap, Map<String, File> fileBodyParamMap, Response.Listener listener, Response.ErrorListener errorListener) { super(Method.POST, YOUR_URL, errorListener); mListener = listener; Charset charset = Charset.forName("UTF-8"); ContentType contentType = ContentType.create("text/plain", charset); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE).setCharset(charset); for (Map.Entry<String, String> entry : textBodyParamMap.entrySet()) { builder.addTextBody(entry.getKey(), entry.getValue(), contentType); } for (Map.Entry<String, File> entry : fileBodyParamMap.entrySet()) { builder.addBinaryBody(entry.getKey(), entry.getValue()); } mEntity = builder.build(); } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<String, String>(); headers.put(HTTP.CHARSET_PARAM, HTTP.UTF_8); return headers; } @Override public String getBodyContentType() { return mEntity.getContentType().getValue(); } @Override public byte[] getBody() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { mEntity.writeTo(baos); } catch (IOException e) { e.printStackTrace(); } return baos.toByteArray(); } @Override protected Response parseNetworkResponse(NetworkResponse response) { JSONObject jo = null; try { jo = new JSONObject(new String(response.data, HttpHeaderParser.parseCharset(response.headers))); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } return Response.success(jo, HttpHeaderParser.parseCacheHeaders(response)); } @Override protected void deliverResponse(Object response) { mListener.onResponse(response); }}
0 0
- 使用volley并结合HttpClient实现上传文件
- Android网络编程之使用HttpClient批量上传文件(二)AsyncTask+HttpClient并实现上传进度监听
- Android网络编程之使用HttpClient批量上传文件(二)AsyncTask+HttpClient并实现上传进度监听
- Android网络编程之使用HttpClient批量上传文件(二)AsyncTask+HttpClient并实现上传进度监听
- 使用HttpClient实现百度PCS文件上传
- SpringMVC使用HttpClient实现文件上传
- 使用HttpClient实现文件的上传
- HttpClient使用MultipartEntityBuilder实现多文件上传
- Android使用HttpClient实现文件上传到PHP服务器,并监控进度条
- Android使用HttpClient实现文件上传到PHP服务器,并监控进度条
- HttpClient 实现文件上传
- 使用httpclient上传文件
- 使用httpclient上传文件
- 使用HttpClient上传文件
- [volley文件上传]Android中自定义MultipartEntity实现文件上传以及使用Volley库实现文件上传
- Volley框架(四):使用Volley上传文件
- Android使用Volley上传文件
- 实现HttpClient上传文件进度条
- Shell笔记
- mysql index部分错误
- 实验一:算数编码实验
- SQLServer数据库导入.mdf文件报错解决问题
- 欢迎使用CSDN-markdown编辑器
- 使用volley并结合HttpClient实现上传文件
- OBJ文件中顶点的对应值
- 多态总结
- WIFI知识学习
- 【Effective c++ 读书笔记】条款01 视 C++ 为一个语言联邦
- JAVA基础第五天
- java 6.24
- LintCode-k数和 II
- 基础了解