最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android使用xUtils3.0實現(xiàn)文件上傳

 更新時間:2016年11月23日 09:59:42   作者:遲做總比不做強  
這篇文章主要為大家詳細(xì)介紹了Android使用xUtils3.0實現(xiàn)文件上傳的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

幾個月前寫過一篇博客《xUtils3.0框架學(xué)習(xí)筆記》 ,上面也有記錄通過xUtils實現(xiàn)文件上傳的使用方法,代碼如下:

private void upLoadOnClick(View v) {
  String upUrl = "/mnt/sdcard/pic/test.jpg";//指定要上傳的文件
  final ProgressDialog dia = new ProgressDialog(this);
  dia.setMessage("加載中....");
  dia.show();
  RequestParams params = new RequestParams(upUrl);
  params.addBodyParameter("file", new File(upUrl));
  x.http().post(params, new Callback.CommonCallback<String>() {
   @Override
   public void onSuccess(String result) {
    //加載成功回調(diào),返回獲取到的數(shù)據(jù)
    Log.i(TAG, "onSuccess: " + result);
   }

   @Override
   public void onFinished() {
    dia.dismiss();//加載完成
   }

   @Override
   public void onCancelled(CancelledException cex) {

   }

   @Override
   public void onError(Throwable ex, boolean isOnCallback) {

   }
  });
 }

我在項目中通過以上方法進(jìn)行圖片上傳,發(fā)現(xiàn)有點小問題,或許是我把這個方法使 用不到位。
在與服務(wù)器聯(lián)調(diào)時,同事總是告訴我沒有收到文件流數(shù)據(jù),結(jié)果肯定是上傳失敗。后來繼續(xù)看代碼跟進(jìn),發(fā)現(xiàn)通過
` params.addBodyParameter("file", new File(upUrl));`
這種方式傳遞文件數(shù)據(jù),默認(rèn)的請求數(shù)據(jù)類型并不是文件類型所需要的multipart/form-data類型數(shù)據(jù)。
通過看相應(yīng)源碼,我們在使用xUtils實現(xiàn)網(wǎng)絡(luò)請求時,通過
`RequestParams params = new RequestParams(Constants.ADD_ZONE_PLANE);`創(chuàng)建請求,然后通過
` params.setRequestBody(body);`傳遞請求參數(shù)。
其實setRequestBody(RequestBody requestBody)方法是調(diào)用RequestParams的父類BaseParams中的方法:

 public void setRequestBody(RequestBody requestBody) {
  this.requestBody = requestBody;
 } 

考慮是參數(shù)數(shù)據(jù)類型問題,我們就從傳遞參數(shù)RequestBody入手,發(fā)現(xiàn)在xUtils中,默認(rèn)有:
 FileBody,InputStreamBody,MultipartBody及StringBody等幾種類型的請求Body,當(dāng)然這些都是RequestBody的子類 。
 發(fā)現(xiàn)MultipartBody類型中,有這個方法:

 private void generateContentType() {
  String boundaryPostfix = Double.toHexString(Math.random() * 0xFFFF);
  boundaryPostfixBytes = boundaryPostfix.getBytes();
  contentType = "multipart/form-data; boundary=" + new String(BOUNDARY_PREFIX_BYTES) + boundaryPostfix;
 }

看到返回的類型是multipart/form-data...,正是我想要的,所以請求參數(shù)就從MultipartBody入手考慮上傳文件。
MultipartBody類的構(gòu)造方法如下:

//參數(shù)分別是要傳入的數(shù)據(jù),和數(shù)據(jù)編碼類型
 public MultipartBody(List<KeyValue> multipartParams, String charset) {
  if (!TextUtils.isEmpty(charset)) {
   this.charset = charset;
  }
  this.multipartParams = multipartParams;
  generateContentType();
  ...
 }

從構(gòu)造方法需要的參數(shù)開始,我們一步一步地實現(xiàn)MultipartBody所需要的數(shù)據(jù)。

  //創(chuàng)建List<KeyValue>對象
  List<KeyValue> list = new ArrayList<>();
  //給list中添加數(shù)據(jù),filePah是上傳的文件路徑,比如sd卡中圖片
  list.add(new KeyValue("file", new File(filePah)));//文件流數(shù)據(jù)
  //其它參數(shù),根據(jù)項目而定,比如我的項目中要傳入的參數(shù)是json格式的
  list.add(new KeyValue("parameters", json.toString()));
  //創(chuàng)建MultipartBody
   MultipartBody body = new MultipartBody(list, "UTF-8");
   //添加請求參數(shù)
  params.setRequestBody(body); 

這樣就可以實現(xiàn)文件上傳,最后貼下整個請求方法的相關(guān)代碼:

//要傳遞給服務(wù)器的json格式參數(shù)
JSONObject json = new JSONObject();
  try {
   json.put("devId", id);
   json.put("devName", devName);
   json.put("keyWord", keyWord);
  } catch (JSONException e) {
   e.printStackTrace();
  }
  //構(gòu)建RequestParams對象,傳入請求的服務(wù)器地址URL
  RequestParams params = new RequestParams(Constants.UPLOAD_FILE);
  params.setAsJsonContent(true);
  List<KeyValue> list = new ArrayList<>();
  list.add(new KeyValue("file", new File(filePah)));
  list.add(new KeyValue("parameters", json.toString()));
  MultipartBody body = new MultipartBody(list, "UTF-8");
  params.setRequestBody(body);
  x.http().post(params, new org.xutils.common.Callback.CommonCallback<String>() {
   @Override
   public void onSuccess(String result) {
    LogUtil.e("請求結(jié)果:" + result);
   }

   @Override
   public void onFinished() {
    //上傳完成
   }

   @Override
   public void onCancelled(CancelledException cex) {
   //取消上傳
   }

   @Override
   public void onError(Throwable ex, boolean isOnCallback) {
   //上傳失敗
    LogUtil.e("請求失敗:" + ex.toString());

   }
  });

關(guān)于Android上傳功能的更多內(nèi)容請點擊專題:Android上傳操作匯總進(jìn)行學(xué)習(xí)。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android實現(xiàn)快遞單號查詢快遞狀態(tài)信息

    Android實現(xiàn)快遞單號查詢快遞狀態(tài)信息

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)快遞單號查詢快遞狀態(tài)信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android將圖片上傳到php服務(wù)器的實例代碼

    Android將圖片上傳到php服務(wù)器的實例代碼

    這篇文章主要介紹了Android將圖片上傳到php服務(wù)器的實例代碼,需要的朋友可以參考下
    2017-07-07
  • Android Studio 報Integer types not allowed錯誤

    Android Studio 報Integer types not allowed錯誤

    本文給大家分享的是在使用Android Studio的過程中遇到的報Integer types not allowed錯誤的分析及解決方法,非常實用,有需要的小伙伴可以參考下
    2017-10-10
  • Android常用的AlertDialog對話框及自定義對話框

    Android常用的AlertDialog對話框及自定義對話框

    本文主要介紹了android常用的AlertDialog對話框及自定義對話框的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • Android基于Aidl的跨進(jìn)程間雙向通信管理中心

    Android基于Aidl的跨進(jìn)程間雙向通信管理中心

    這篇文章主要為大家詳細(xì)介紹了Android基于Aidl的跨進(jìn)程間雙向通信管理中心,類似于聊天室,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Android拍照上傳功能示例代碼

    Android拍照上傳功能示例代碼

    這篇文章主要介紹了Android拍照上傳功能用法,結(jié)合實例形式詳細(xì)分析了Android拍照上傳功能所涉及的相關(guān)知識點與功能實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • Android實現(xiàn)炫酷輪播圖效果

    Android實現(xiàn)炫酷輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)炫酷輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android?LineChart繪制折線圖的示例詳解

    Android?LineChart繪制折線圖的示例詳解

    這篇文章主要為大家想想介紹了Android?RecyclerLineChart實現(xiàn)繪制折線圖的相關(guān)資料,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-03-03
  • Android?無障礙服務(wù)?performAction?調(diào)用過程分析

    Android?無障礙服務(wù)?performAction?調(diào)用過程分析

    這篇文章主要介紹了Android?無障礙服務(wù)?performAction?調(diào)用過程分析,無障礙服務(wù)可以模擬一些用戶操作,無障礙可以處理的對象,通過類?AccessibilityNodeInfo?表示,通過無障礙服務(wù),可以通過它的performAction方法來觸發(fā)一些action
    2022-06-06
  • Flutter?webview與網(wǎng)頁通訊交互實現(xiàn)

    Flutter?webview與網(wǎng)頁通訊交互實現(xiàn)

    最近要在Flutter項目的基礎(chǔ)上加一個實時定位的功能,下面這篇文章主要給大家介紹了關(guān)于Flutter?webview與網(wǎng)頁通訊交互實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評論

嘉祥县| 凤山市| 山东| 旺苍县| 乡宁县| 仪陇县| 安化县| 罗山县| 进贤县| 登封市| 开江县| 钟山县| 宜宾县| 邻水| 九龙城区| 丰顺县| 高安市| 拜泉县| 汽车| 镇坪县| 莎车县| 米易县| 高唐县| 孟津县| 滦平县| 六枝特区| 镇雄县| 鹤壁市| 海淀区| 龙陵县| 象山县| 江川县| 富锦市| 波密县| 长武县| 锡林浩特市| 西华县| 喀什市| 德兴市| 楚雄市| 海兴县|