国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android使用Volley實(shí)現(xiàn)上傳文件功能

2019-10-21 21:31:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一個(gè)項(xiàng)目中用到的使用Volley上傳頭像文件的例子,供大家參考,具體內(nèi)容如下

/** * Created by wangshihui on 2015/11/30. * 上傳文件 * url:.....  method:post  參數(shù):file  接口給的參數(shù):file 就是表單的key,傳給mFilePartName;  這是個(gè)測(cè)試類(lèi),測(cè)試上傳頭像沒(méi)有問(wèn)題,適合只上傳單個(gè)文件的場(chǎng)景 */public class MultipartRequest extends Request<JSONObject> {  private String mHeader;  private Map<String, String> mMap;  private String cookieFromResp = "";  private Map<String, String> headerMap = new HashMap<>();  private MultipartEntity entity = new MultipartEntity();  private final Response.Listener<JSONObject> mListener;  private final File mFilePart;  private String mFilePartName;  /**   * @param url   * @param listener   * @param errorListener   * @param file_name   * @param file   */  public MultipartRequest(String url, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener, String file_name,File file)  {    super(Method.POST, url, errorListener);    mListener = listener;    mFilePart = file;    mFilePartName=file_name;    buildMultipartEntity();  }  /**   * 添加文件參數(shù)   */  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();  }  /**   * @param response   * @return   */  @Override  protected Response<JSONObject> 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();    }    //獲取數(shù)據(jù)頭    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));  }  }  /**   * @param response   */  @Override  protected void deliverResponse(JSONObject response)  {    mListener.onResponse(response);  }  @Override  protected Map<String, String> getParams() throws AuthFailureError {    return mMap;  }  /**   * @return   * @throws AuthFailureError   */  @Override  public Map<String, String> getHeaders() throws AuthFailureError {    return headerMap;  }  /**   * @return   */  @Override  public RetryPolicy getRetryPolicy() {    RetryPolicy retryPolicy = new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);    return retryPolicy;  }  /**   * @param cookie   */  //將Cookie加入數(shù)據(jù)頭  public void setSendCookie(String cookie) {    headerMap.put("Cookie", cookie);  }}

調(diào)用方法如下:

//指定url路徑String url = "http://182.92.....";MultipartRequest multipartRequest = new MultipartRequest(    url, new Response.Listener<JSONObject>() {  @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, "網(wǎng)絡(luò)連接異常");  }}, "file", mSelectedPictureFile);multipartRequest.setSendCookie(loadSessionID());multipartRequest.setTag(TAG);client.addTask(multipartRequest);

private File mSelectedPictureFile;
mSelectedPictureFile是一個(gè)File文件,參數(shù)名是file

通信成功保存Cookie

saveSessionID(response);  

發(fā)送請(qǐng)求上傳cookie

multipartRequest.setSendCookie(loadSessionID());

client是一個(gè)Volley的簡(jiǎn)單封裝

protected AsynHttpClient client;

public class AsynHttpClient {  //volley的請(qǐng)求隊(duì)列  private RequestQueue requestQueue;  //保證全局變量是單一的  private static AsynHttpClient instance;  private Context mContext;  private AsynHttpClient(Context context) {    requestQueue = Volley.newRequestQueue(context);    this.mContext = context;  }  /**   * 單列模式,讓AsynHttpClient在整個(gè)項(xiàng)目中保持只有一個(gè)   * @param context   * @return   */  public static AsynHttpClient getInstance(Context context) {    if (instance==null){      synchronized (AsynHttpClient.class){        if (instance==null){          instance=new AsynHttpClient(context);        }      }    }    return instance;  }  /**   * 添加任務(wù)到volley的請(qǐng)求隊(duì)列中去,并不會(huì)立即執(zhí)行   * @param task   */  public void addTask(Request task){    requestQueue.add(task);  }  public RequestQueue getRequestQueue() {    return requestQueue;  }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 桃江县| 孟州市| 东辽县| 望城县| 通海县| 渝北区| 汉中市| 崇礼县| 三河市| 米易县| 苏州市| 台南市| 乌鲁木齐县| 兰溪市| 田林县| 福安市| 禹城市| 托克逊县| 台中县| 云南省| 札达县| 清丰县| 宣汉县| 资源县| 阿拉善右旗| 安吉县| 库尔勒市| 扶余县| 庆元县| 平塘县| 称多县| 巴彦淖尔市| 进贤县| 东山县| 海安县| 东乡县| 衢州市| 中牟县| 安塞县| 略阳县| 云南省|