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 ответа:
Решение, приведенное ниже, может помочь вам, хотя это может быть слишком поздно. :p
Удалите объект
HttpLoggingInterceptor
в вашем клиенте Api, который не будет выполнять функцию writeTo() дважды.В принципе,HttpLoggingInterceptor
Сначала загружает буфер данных (для внутреннего ведения журнала), вызывая writeTo (), а затем снова вызывает writeTo () для загрузки данных на сервер.HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); httpClient.addInterceptor(logging);
Я выяснил еще один случай для дважды называемого метода writeTo (). Я использую Ohttpclient без модернизации и HttpLoggingInterceptor, и у меня есть проблема дважды называемая.
Решение : проблема появляется после обновления Android Studio до версии 3.1.1 и включения расширенного профилирования в конфигурации run project. Поэтому отключите расширенное профилирование.