中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

绵竹市| 高青县| 自贡市| 新绛县| 乳源| 新邵县| 徐汇区| 龙泉市| 嫩江县| 都匀市| 宁夏| 剑河县| 喀喇沁旗| 介休市| 平原县| 宜兰县| 松江区| 准格尔旗| 永定县| 当雄县| 德江县| 祁连县| 屏东县| 且末县| 北海市| 光山县| 莆田市| 大余县| 庄浪县| 商丘市| 宜章县| 开封市| 博客| 封开县| 全椒县| 巴塘县| 樟树市| 永登县| 湛江市| 墨江| 吉安县|