2016-11-21 2 views
3

Я использую RxJava 2 & Retrofit 2 (https://github.com/JakeWharton/retrofit2-rxjava2-adapter) и мне было интересно, как не обрабатывать никакого ответа (204) типа. В rxjava1 я использовал Observable<Void>, но это не разрешено rxjava2 больше (https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0 -> NULLS)Как не обрабатывать никакого содержания ответа при использовании RxJava2 ЕТ Retrofit2

Прямо сейчас, я уже взломал вокруг обойти JSon синтаксический на пользовательский тип (я назвал его NoContent), но мне было интересно, если есть лучший способ.

EDIT:

public class NoContent { 
    public static class GsonTypeAdapter extends TypeAdapter<NoContent> { 

     @Override 
     public void write(JsonWriter out, NoContent value) throws IOException { 
      out.nullValue(); 
     } 

     @Override 
     public NoContent read(JsonReader in) throws IOException { 
      return new NoContent(); 
     } 
    } 
} 
+0

У меня есть аналогичная проблема, любое решение еще? –

+0

Не то, чтобы я знал; – Romain

ответ

0

Вы можете использовать Completable, Observable<ResponseBody> или Observable<Response<T>> в случае, если вы собираетесь получить 204 ответы без получения исключений преобразователя.

Возможно, лучший вариант - использовать Completable в качестве возврата. Все ответы 2xx от сервера будут в onComplete. Другое закончится в onError.

В случае ResponseBody все виды допустимых ответов HTTP не будет преобразован в объект и в конечном итоге в onNext, в том числе и 4xx5xx ответов.

В случае Response<T> будут преобразованы только 2xx ответы, в том числе, вероятно, HTTP 204 код ответа. Поэтому я не уверен, что вы должны его использовать, хотя все действительные ответы HTTP в этом случае также попадут в onNext, включая 4xx и 5xx ответов.