android 使用OkHttp上傳多張圖片的實現代碼
簡述
還是先來說說為啥用OkHttp作為多圖片上傳的框架,原因有兩點:
1、OkHttp可以作為Volley底層傳輸協(xié)議,速度更快
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"); //創(chuàng)建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(); //發(fā)送異步請求,同步會報錯,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區(qū)別
List可以保存多個相同或者不同的元素
HashMap則是以鍵值對(key-value)保存元素,當添加多個相同key的元素,之前的元素會被覆蓋
這一點至關重要,Xutils以及KJFframework的設計都沒有考慮到這一點,看似很好用,但當我要添加多張相同或者不同的圖片文件作為參數傳輸給后臺,我卻需要定義很多的key,不然無論添加多少張圖片結果卻只能是最后一張。
總結
以上所述是小編給大家介紹的android 使用OkHttp上傳多張圖片的實現代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
相關文章
Android音頻錄制MediaRecorder之簡易的錄音軟件實現代碼
這篇文章主要介紹了Android音頻錄制MediaRecorder之簡易的錄音軟件實現代碼,有需要的朋友可以參考一下2014-01-01Android(2.2/2.3系統(tǒng))Gallery解決默認和橫豎屏切換選中狀態(tài)問題
本文主要介紹Android Gallery,在Android開發(fā)過程中肯定會遇到版本不同,在開發(fā)過程中需要調整的,這里針對Android(2.2/2.3系統(tǒng)版本) Gallery解決默認和橫豎屏切換選中狀態(tài)問題2016-07-07Android 手機瀏覽器調試使用Chrome進行調試實例詳解
這篇文章主要介紹了Android 手機瀏覽器調試使用Chrome進行調試實例詳解的相關資料,這里提供了實例,需要的朋友可以參考下2016-12-12Android中EditText和AutoCompleteTextView設置文字選中顏色方法
這篇文章主要介紹了Android中EditText和AutoCompleteTextView設置文字選中顏色方法,本文給出了效果圖和實現代碼,需要的朋友可以參考下2015-01-01