Volley扩展-支持表单上传(文本或文件)
来源:互联网 发布:电气制图cad软件 编辑:程序博客网 时间:2024/05/21 07:46
</pre><pre code_snippet_id="1586756" snippet_file_name="blog_20160224_2_4887381" name="code" class="java"><span style="font-size:18px;">对返回的json字符串根据对象或数组标记进行Gson解析;</span>
package com.android.volley.toolbox;import com.android.volley.AuthFailureError;import com.android.volley.DefaultRetryPolicy;import com.android.volley.NetworkResponse;import com.android.volley.Request;import com.android.volley.Response;import com.android.volley.VolleyError;import com.android.volley.Request.ResponseListener;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.FileProgressListener;import com.android.volley.toolbox.FormFile;import com.android.volley.toolbox.HttpHeaderParser;import java.io.DataOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;public class MultipartRequest extends Request<String> { private final ResponseListener mListener;//服务器响应的数据回调 private final FileProgressListener mProgressListener;文件上传进度回调 private Map<String, String> headerMap; private Map<String, String> mParams;//上传的参数 private FormFile[] files;//上传的文件参数 private String BOUNDARY; private boolean object;//返回的具体数据是否为对象 private Class mClass;//对象字节码类型 public MultipartRequest(String url, ResponseListener listener, ErrorListener errorListener, Map<String, String> params, FormFile[] files, Class clazz, boolean object) { this(1, url, listener, errorListener, (FileProgressListener)null, params, files, clazz, object); } public MultipartRequest(String url, ResponseListener listener, ErrorListener errorListener, FileProgressListener progressListener, Map<String, String> params, FormFile[] files, Class clazz, boolean object) { this(1, url, listener, errorListener, progressListener, params, files, clazz, object); } public MultipartRequest(int method, String url, ResponseListener listener, ErrorListener errorListener, FileProgressListener progressListener, Map<String, String> params, FormFile[] files, Class clazz, boolean object) { super(method, url, errorListener); this.BOUNDARY = "---------7dc05dba8f3e19"; this.mListener = listener; this.mProgressListener = progressListener; this.mParams = params; this.files = files; this.mClass = clazz; this.object = object; this.setRetryPolicy(new DefaultRetryPolicy(10000, 1, 1.0F)); } public String getBodyContentType() { return "multipart/form-data; boundary=" + this.BOUNDARY; } public byte[] getBody() throws AuthFailureError { if(this.getParams() != null) { return super.getBody(); } else { StringBuilder sb = new StringBuilder(); Iterator var3 = this.mParams.entrySet().iterator(); while(var3.hasNext()) { Entry e = (Entry)var3.next(); sb.append("--"); sb.append(this.BOUNDARY); sb.append("\r\n"); sb.append("Content-Disposition: form-data; name=\"" + (String)e.getKey() + "\"\r\n\r\n"); sb.append((String)e.getValue()); sb.append("\r\n"); } try { return sb.toString().getBytes("utf-8"); } catch (UnsupportedEncodingException var4) { var4.printStackTrace(); return null; } } } public void writeFile(OutputStream out) { DataOutputStream dos = (DataOutputStream)out; try { if(this.files != null) { FormFile[] var6 = this.files; int var5 = this.files.length; for(int e1 = 0; e1 < var5; ++e1) { FormFile e = var6[e1]; StringBuilder split = new StringBuilder(); split.append("--"); split.append(this.BOUNDARY); split.append("\r\n"); split.append("Content-Disposition: form-data;name=\"" + e.getParameterName() + "\";filename=\"" + e.getFileName() + "\"\r\n"); split.append("Content-Type: " + e.getContentType() + "\r\n\r\n"); dos.write(split.toString().getBytes()); if(e.getInputStream() == null) { dos.write(e.getBytes(), 0, e.getBytes().length); } else { byte[] buffer = new byte[1024]; boolean len = true; int count = 0; int var13; while((var13 = e.getInputStream().read(buffer)) != -1) { dos.write(buffer, 0, var13); count += var13; if(this.mProgressListener != null) { this.mProgressListener.onProgressChange(e.getFileSize(), count); } } boolean var14 = false; e.getInputStream().close(); } dos.write("\r\n".getBytes()); } } dos.write(("--" + this.BOUNDARY + "--\r\n").getBytes("utf-8")); dos.flush(); } catch (Exception var12) { this.deliverError(new VolleyError(var12.toString())); try { dos.close(); } catch (IOException var11) { var11.printStackTrace(); } } } protected Response<String> parseNetworkResponse(NetworkResponse response) { String parsed; try { parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); } catch (UnsupportedEncodingException var4) { parsed = new String(response.data); } return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); } protected void deliverResponse(String response) { this.mListener.onResponse(response, this.mClass, this.object); }}
0 0
- Volley扩展-支持表单上传(文本或文件)
- Volley扩展——文件上传(支持进度条)
- Volley扩展——文件上传(支持进度条)
- 分享一个volley支持 multipart上传文件
- 分享一个volley支持 multipart上传文件
- 使用ajax提交表单或上传文件
- Volley上传文件
- volley文件上传
- Volley上传文件
- JAVA_模拟HTTP表单POST文本或文件
- iOS使用表单流上传文件(图片/文本/...)
- android 表单提交 (支持多文件上传) + 服务端代码
- Volley框架(四):使用Volley上传文件
- Volley扩展——文件断点下载(支持下载进度)
- Volley扩展——文件断点下载(支持下载进度)
- Volley扩展-json上传,json字符串解析
- 基于Volley的文件上传
- Android使用Volley上传文件
- 软键盘操作
- 灰度世界算法(Gray World Algorithm)和White Patch Retinex算法
- Android之粘性广播理解
- GO语言(golang)官方网站!
- ios 防止按钮快速点击造成多次响应的避免方法
- Volley扩展-支持表单上传(文本或文件)
- Android开发笔记(六十九)JNI实战
- 在cocos2dx中新开一个黑窗口&&lua中的print在win下问题
- AssetsLibrary显示本地照片
- iOS UIScrollView不能响应touchBegin的解决方法
- unity touch
- Struts2 动态结果集
- table './pacific/custom_form' is marked as crashed and should be repaired
- 数组排序