一个项目中用到的使用Volley上传头像文件的例子,供大家参考,具体内容如下
public class MultipartRequest extends Request{ private String mHeader; private Map mMap; private String cookieFromResp = ""; private Map headerMap = new HashMap<>(); private MultipartEntity entity = new MultipartEntity(); private final Response.Listener mListener; private final File mFilePart; private String mFilePartName; public MultipartRequest(String url, Response.Listener listener, Response.ErrorListener errorListener, String file_name,File file) { super(Method.POST, url, errorListener); mListener = listener; mFilePart = file; mFilePartName=file_name; buildMultipartEntity(); } private void buildMultipartEntity() { entity.addPart(mFilePartName, new FileBody(mFilePart)); } @Override public String getBodyContentType() { return entity.getContentType().getValue(); } @Override public byte[] getBody() throws AuthFailureError { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { entity.writeTo(bos); } catch (IOException e) { VolleyLog.e("IOException writing to ByteArrayOutputStream"); } return bos.toByteArray(); } @Override protected Response parseNetworkResponse(NetworkResponse response) { try { JSonObject jsonObject; System.out.println(response.headers.toString()); if (response.data.length != 0) { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); jsonObject = new JSonObject(jsonString); } else { jsonObject = new JSonObject(); } //获取数据头 mHeader = response.headers.toString(); //提取cookie(JSESSIONID) Pattern pattern = Pattern.compile("Set-cookie=.*?;"); Matcher matcher = pattern.matcher(mHeader); if (matcher.find()) { cookieFromResp = matcher.group(); cookieFromResp = cookieFromResp.substring(11, cookieFromResp.length() - 1); System.out.println("cookie: " + cookieFromResp); } jsonObject.put("cookie", cookieFromResp); return Response.success(jsonObject, HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSonException je) { return Response.error(new ParseError(je)); } } @Override protected void deliverResponse(JSonObject response) { mListener.onResponse(response); } @Override protected Map getParams() throws AuthFailureError { return mMap; } @Override public Map getHeaders() throws AuthFailureError { return headerMap; } @Override public RetryPolicy getRetryPolicy() { RetryPolicy retryPolicy = new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); return retryPolicy; } //将cookie加入数据头 public void setSendcookie(String cookie) { headerMap.put("cookie", cookie); } }
调用方法如下:
//指定url路径
String url = "http://182.92.....";
MultipartRequest multipartRequest = new MultipartRequest(
url, new Response.Listener() {
@Override
public void onResponse(JSonObject response) {
saveSessionID(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError e) {
Log.e(TAG, e.getMessage(), e);
try {
byte[] htmlBodyBytes = e.networkResponse.data;
Log.e(TAG, new String(htmlBodyBytes), e);
} catch (Exception e1) {
e1.printStackTrace();
}
ToastUtil.showShortToast(UserCenterActivity.this, "网络连接异常");
}
}, "file", mSelectedPictureFile);
multipartRequest.setSendcookie(loadSessionID());
multipartRequest.setTag(TAG);
client.addTask(multipartRequest);
private File mSelectedPictureFile;
mSelectedPictureFile是一个File文件,参数名是file
通信成功保存cookie
saveSessionID(response);
发送请求上传cookie
multipartRequest.setSendcookie(loadSessionID());
client是一个Volley的简单封装
protected AsynHttpClient client;
public class AsynHttpClient {
//volley的请求队列
private RequestQueue requestQueue;
//保证全局变量是单一的
private static AsynHttpClient instance;
private Context mContext;
private AsynHttpClient(Context context) {
requestQueue = Volley.newRequestQueue(context);
this.mContext = context;
}
public static AsynHttpClient getInstance(Context context) {
if (instance==null){
synchronized (AsynHttpClient.class){
if (instance==null){
instance=new AsynHttpClient(context);
}
}
}
return instance;
}
public void addTask(Request task){
requestQueue.add(task);
}
public RequestQueue getRequestQueue() {
return requestQueue;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



