這篇文章給大家分享的是有關(guān)Android中Okhttp3如何實現(xiàn)上傳多張圖片同時傳遞參數(shù)的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),清水河企業(yè)網(wǎng)站建設(shè),清水河品牌網(wǎng)站建設(shè),網(wǎng)站定制,清水河網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,清水河網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
最近做項目,打算換個方法上傳圖片。
Android發(fā)展到現(xiàn)在,Okhttp顯得越來越重要,所以,這次我選擇用Okhttp上傳圖片。
Okhttp目前已經(jīng)更新到Okhttp3版本了,用法跟之前相比,也有一些差別。在網(wǎng)上找了很多資料,
并和java后臺同事反復調(diào)試,終于成功上傳多張圖片,同時傳遞一些鍵值對參數(shù)。
以下是我對該過程的封裝:
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); /** * 上傳多張圖片及參數(shù) * @param reqUrl URL地址 * @param params 參數(shù) * @param pic_key 上傳圖片的關(guān)鍵字 * @param paths 圖片路徑 */ public ObservablesendMultipart(String reqUrl,Map params,String pic_key, List files){ return Observable.create(new Observable.OnSubscribe (){ @Override public void call(Subscriber super String> subscriber) { MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder(); multipartBodyBuilder.setType(MultipartBody.FORM); //遍歷map中所有參數(shù)到builder if (params != null){ for (String key : params.keySet()) { multipartBodyBuilder.addFormDataPart(key, params.get(key)); } } //遍歷paths中所有圖片絕對路徑到builder,并約定key如“upload”作為后臺接受多張圖片的key if (files != null){ for (File file : files) { multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file)); } } //構(gòu)建請求體 RequestBody requestBody = multipartBodyBuilder.build(); Request.Builder RequestBuilder = new Request.Builder(); RequestBuilder.url(reqUrl);// 添加URL地址 RequestBuilder.post(requestBody); Request request = RequestBuilder.build(); mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { subscriber.onError(e); subscriber.onCompleted(); call.cancel(); } @Override public void onResponse(Call call, Response response) throws IOException { String str = response.body().string(); subscriber.onNext(str); subscriber.onCompleted(); call.cancel(); } }); } }); }
在UI界面的調(diào)用:
OkHttp3Utils.getInstance().sendMultipart(Constants.URL.URL_ADD_NOTICE, mMap, "appendix", mImageList) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .subscribe(new Subscriber() { @Override public void onCompleted() { } @Override public void onError(Throwable throwable) { LogUtil.i(TAG, "throwable:" + throwable.toString()); } @Override public void onNext(String s) { LogUtil.i(TAG, "s:" + s); } });
調(diào)試過程中,有一次將 multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file));寫成了 multipartBodyBuilder.addFormDataPart(pic_key, null, RequestBody.create(MEDIA_TYPE_PNG, file));導致后臺無法用常規(guī)方法獲取圖片(雖然斷點調(diào)試時也能看到圖片數(shù)據(jù)),這點需要注意。
感謝各位的閱讀!關(guān)于“Android中Okhttp3如何實現(xiàn)上傳多張圖片同時傳遞參數(shù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!