栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android使用Volley实现上传文件功能

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android使用Volley实现上传文件功能

一个项目中用到的使用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;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/155144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号