Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Модернизация с помощью RXJava/RxAndroid: как работает Observable?

Автор вопроса: Lu AraujoОтветов: 1

Я только начинаю с Retrofit и RXJava. У меня есть вызов API, который загружает файл и возвращает http-ответ с пустым телом и статусом 200 (на случай, если все работает нормально). Я перевел это как модификацию:

 @PUT("/in")
 Observable<Void> uploadFile(@Body ResponseBody file);

Но когда я использую mApi.uploadFile(f), я получаю исключение:

Caused by: java.lang.IllegalArgumentException: Could not locate call
adapter for rx.Observable<java.lang.Void>. Tried:
    * retrofit.ExecutorCallAdapterFactory
    at retrofit.Retrofit.nextCallAdapter(Retrofit.java:207)
    at retrofit.Retrofit.callAdapter(Retrofit.java:175)
    at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:45)

Я прочитал здесь, что для пустого ответа без RxJava лучше всего использовать Void. Это не работает с RXJava? Должен ли я внедрять адаптер? .

Редактировать 1:

Необходимо добавить CallAdapterFactory для модернизации, как указано в ответе rxjava">здесь. Мне также пришлось преобразовать параметр File. Тем не менее, ошибка остается.

Второй шаг после того, как я выясню, как сопоставить запрос на модернизацию, - это цепочка загрузок нескольких файлов. Как я могу это сделать?

Также приветствуются ссылки на расширенные руководства по использованию RXJava + Retrofit или примеры.

androidretrofit2rx-java

Ответы

Ответ 1 · рейтинг 2 · gropapa

Я предполагаю, что ваша проблема в том, что вы не можете передать файл в качестве аргумента, вы должны передать параметр RequestBody как

RequestBody.create(mediaType, file);

Таким образом, подпись вызова модификации должна выглядеть так:

@PUT("/in")
Observable<Void> uploadFile(RequestBody file);

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы