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

Я только начинаю с 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 или примеры.


person Lu Araujo    schedule 12.05.2016    source источник


Ответы (1)


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

RequestBody.create(mediaType, file);

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

@PUT("/in")
Observable<Void> uploadFile(RequestBody file);
person gropapa    schedule 12.05.2016
comment
Да... Я понял это. Тем не менее, моя проблема, похоже, вызвана типом Void, используемым в Observable‹Void›. - person Lu Araujo; 12.05.2016