Retrofit 2 RequestBody writeTo () метод вызывается дважды


Retrofit 2 RequestBody writeTo () метод вызывается дважды, код, который я использовал, приведен ниже:

ProgressRequestBody requestVideoFile = new ProgressRequestBody(videoFile, new ProgressRequestBody.UploadCallbacks() {

    VideoUploadStore store = new VideoUploadStore();

    @Override
    public void onProgressUpdate(int percentage) {
        if (!mIsCancelled) {
            Log.i("UploadServiceManager", "Read Percentage : " + percentage);
            data.setUploadPercentage(percentage);
            store.updateUploadData(data);
        }
    }

    @Override
    public void onError() {
        if(!mIsCancelled) {
            data.setUploadPercentage(0);
            store.updateUploadData(data);
        }
    }

    @Override
    public void onFinish() {

    }
});
MultipartBody.Part multipartVideo = MultipartBody.Part.createFormData("File", videoFile.getName(), requestVideoFile);
3 9

3 ответа:

Решение, приведенное ниже, может помочь вам, хотя это может быть слишком поздно. :p

Удалите объект HttpLoggingInterceptor в вашем клиенте Api, который не будет выполнять функцию writeTo() дважды.В принципе, HttpLoggingInterceptor Сначала загружает буфер данных (для внутреннего ведения журнала), вызывая writeTo (), а затем снова вызывает writeTo () для загрузки данных на сервер.

  HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
  logging.setLevel(HttpLoggingInterceptor.Level.BODY);
  httpClient.addInterceptor(logging);

Уменьшение уровня журнала от тела до заголовков, BASIC или NONE решило эту проблему для меня

Я выяснил еще один случай для дважды называемого метода writeTo (). Я использую Ohttpclient без модернизации и HttpLoggingInterceptor, и у меня есть проблема дважды называемая.

Решение : проблема появляется после обновления Android Studio до версии 3.1.1 и включения расширенного профилирования в конфигурации run project. Поэтому отключите расширенное профилирование.