English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Okhttp in Android3Implementation of uploading multiple images while passing parameters

Bisher wurden die Bilder beim Hochladen direkt in InputStreams umgewandelt und dem Server übergeben, ohne Frameworks zu verwenden, um Bilder zu übertragen.

Kürzlich habe ich ein Projekt gemacht und plane, eine andere Methode zum Hochladen von Bildern zu verwenden.

Mit der Entwicklung von Android wird Okhttp immer wichtiger, daher habe ich mich这次选择用Okhttp上传图片.

Okhttp wurde bereits auf Okhttp aktualisiert3Version, im Vergleich zu früher, gibt es auch einige Unterschiede. Viele Informationen wurden im Internet gefunden,

Und mit den Kollegen im Java-Backend wurde mehrmals getestet, bis das Hochladen mehrerer Bilder erfolgreich war und einige Parameter übertragen wurden.

Hier ist meine Verpackung für diesen Prozess:

private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
/**
   * Hochladen mehrerer Bilder und Parameter
   * @param reqUrl URL-Adresse
   * @param params Parameter
   * @param pic_key Schlüsselwort für das Hochladen von Bildern
   * @param paths Bildpfad
   */
  public Observable<String> sendMultipart(String reqUrl,Map<String, String> params,String pic_key, List<File> files){
    return Observable.create(new Observable.OnSubscribe<String>(){
      @Override
      public void call(Subscriber<? super String> subscriber) {
        MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder();
        multipartBodyBuilder.setType(MultipartBody.FORM);
        //Durchlaufe alle Parameter im Map in den Builder
        if (params != null){
          for (String key : params.keySet()) {
            multipartBodyBuilder.addFormDataPart(key, params.get(key));
          }
        }
        //Durchsuchen Sie alle absoluten Pfade der Bilder in paths und vereinbaren Sie Schlüssel wie "upload", um als Schlüssel für die Verarbeitung mehrerer Bilder durch das Backend zu dienen
        if (files != null){
          for (File file : files) {
            multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file));
          }
        }
        //Bauen Sie den Anforderungskörper auf
        RequestBody requestBody = multipartBodyBuilder.build();
        Request.Builder RequestBuilder = new Request.Builder();
        RequestBuilder.url(reqUrl);// Fügen Sie die URL-Adresse hinzu
        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();
          }
        });
      }
    });
  } 

In der Anforderung der Benutzeroberfläche UI:

OkHttp3Utils.getInstance().sendMultipart(Constants.URL.URL_ADD_NOTICE, mMap, "appendix", mImageList)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeOn(Schedulers.newThread())
        .subscribe(new Subscriber<String>() {
          @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);
          }
        }); 

Während des Debuggens habe ich einmal multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file)); in multipartBodyBuilder.addFormDataPart(pic_key, null, RequestBody.create(MEDIA_TYPE_PNG, file)); geändert, was dazu führte, dass das Backend das Bild nicht mit den gängigen Methoden abrufen konnte (obwohl die Bilddaten bei der breakpoints-Debugging auch sichtbar waren), darauf sollte man achten.

Das ist der gesamte Inhalt dieses Artikels. Ich hoffe, er hilft Ihnen bei Ihrem Lernen und ich hoffe, dass Sie die Anleitung von Rufen stark unterstützen.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet entnommen und gehört dem Urheberrecht des Urhebers. Der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie Inhalte finden, die möglicherweise urheberrechtlich geschützt sind, senden Sie bitte eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @, wenn Sie eine Beschwerde einreichen, und fügen Sie relevante Beweise bei. Sobald die Beschwerde überprüft wurde, wird die Website den涉嫌侵权的内 容立即删除。)

You may also like