android 使用OkHttp上傳多張圖片的實現代碼
簡述
還是先來說說為啥用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");
//創(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-01
Android(2.2/2.3系統)Gallery解決默認和橫豎屏切換選中狀態(tài)問題
本文主要介紹Android Gallery,在Android開發(fā)過程中肯定會遇到版本不同,在開發(fā)過程中需要調整的,這里針對Android(2.2/2.3系統版本) Gallery解決默認和橫豎屏切換選中狀態(tài)問題2016-07-07
Android 手機瀏覽器調試使用Chrome進行調試實例詳解
這篇文章主要介紹了Android 手機瀏覽器調試使用Chrome進行調試實例詳解的相關資料,這里提供了實例,需要的朋友可以參考下2016-12-12
Android中EditText和AutoCompleteTextView設置文字選中顏色方法
這篇文章主要介紹了Android中EditText和AutoCompleteTextView設置文字選中顏色方法,本文給出了效果圖和實現代碼,需要的朋友可以參考下2015-01-01

