真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android中Okhttp3如何實現(xiàn)上傳多張圖片同時傳遞參數(shù)

這篇文章給大家分享的是有關(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 Observable sendMultipart(String reqUrl,Map params,String pic_key, List files){
    return Observable.create(new Observable.OnSubscribe(){

      @Override
      public void call(Subscriber 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)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


分享標題:Android中Okhttp3如何實現(xiàn)上傳多張圖片同時傳遞參數(shù)
網(wǎng)站路徑:http://weahome.cn/article/ggijdh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部