亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android 使用OkHttp上傳多張圖片的實現代碼

發布時間:2020-08-26 15:24:06 來源:腳本之家 閱讀:396 作者:djk_dong 欄目:移動開發

簡述

還是先來說說為啥用OkHttp作為多圖片上傳的框架,原因有兩點:

1、OkHttp可以作為Volley底層傳輸協議,速度更快

2、使用Xutils和KJFramework上傳圖片存在一個小問題,首先,可以上傳,并且可以上傳多張圖片,也可以上傳其他的參數,那問題在哪里呢?在后臺接受參數時很不靈活,Xutlis及KJFramework使用HashMap來上傳每個參數,每一張圖片也必須有一個唯一的key,上傳一張圖片就要定義一個參數來接收,上傳兩張圖片就要定義兩個參數來接收,當上傳的圖片數量不確定的時候,如最多9張或者16張,后臺接受圖片的時候就要定義9個或者16個,這樣的方式很不利于擴展,最好是一個參數接收所有所有圖片,不會因為這種不確定的問題,就去定義很多的參數,然后一個個判斷是否存在。OkHttp底層則不是這樣,大概的瀏覽了下源碼,底層接收參數的時候使用的是List,只要使用相同的key就可以添加到同一個list,而后臺只需要根據這一個key不斷遍歷就行,無論多少張圖片都無障礙,也沒有了后顧之憂。

核心代碼實現

//參數類型
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
//創建OkHttpClient實例
private final OkHttpClient client = new OkHttpClient();
MultipartBuilder builder = new MultipartBuilder().type(MultipartBuilder.FORM);
//遍歷map中所有參數到builder
for (String key : map.keySet()) {
      builder.addFormDataPart(key, map.get(key));
    }
  //遍歷paths中所有圖片絕對路徑到builder,并約定key如“upload”作為后臺接受多張圖片的key
    for (String path : paths) {
      builder.addFormDataPart("upload", null, RequestBody.create(MEDIA_TYPE_PNG, new File(path)));
    }
   //構建請求體
    RequestBody requestBody = builder.build();
 //構建請求
 Request request = new Request.Builder()
        .url(url)//地址
        .post(requestBody)//添加請求體
        .build(); 
//發送異步請求,同步會報錯,Android4.0以后禁止在主線程中進行耗時操作
client.newCall(request).enqueue(new Callback() {
      @Override
      public void onFailure(Request request, IOException e) {
        System.out.println("request = " + request.urlString());
        System.out.println("e.getLocalizedMessage() = " + e.getLocalizedMessage());
      }
      @Override
      public void onResponse(Response response) throws IOException {
        //看清楚是response.body().string()不是response.body().toString()
             System.out.println("response = " + response.body().string());
             }
    });

基本實現思路就是這樣了,更多請參考OkHttp文檔,項目中我準備完全除去Xutils的其他部分,如文件下載部分。

知識拓展

List與HashMap區別

List可以保存多個相同或者不同的元素

HashMap則是以鍵值對(key-value)保存元素,當添加多個相同key的元素,之前的元素會被覆蓋

這一點至關重要,Xutils以及KJFframework的設計都沒有考慮到這一點,看似很好用,但當我要添加多張相同或者不同的圖片文件作為參數傳輸給后臺,我卻需要定義很多的key,不然無論添加多少張圖片結果卻只能是最后一張。

總結

以上所述是小編給大家介紹的android 使用OkHttp上傳多張圖片的實現代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

特克斯县| 军事| 岳普湖县| 九台市| 翼城县| 法库县| 轮台县| 娄烦县| 玉田县| 乌鲁木齐县| 苗栗市| 南安市| 黄骅市| 闵行区| 尼玛县| 三明市| 安塞县| 乳山市| 大石桥市| 克什克腾旗| 许昌市| 玛沁县| 克拉玛依市| 长海县| 保定市| 冕宁县| 望谟县| 思茅市| 上杭县| 阿鲁科尔沁旗| 定远县| 正蓝旗| 古田县| 溆浦县| 陕西省| 加查县| 铜陵市| 印江| 封丘县| 邯郸县| 含山县|