5

我正在使用RxJava 2& Retrofit 2https://github.com/JakeWharton/retrofit2-rxjava2-adapter),我想知道如何处理无响应(204)类型。在 rxjava1 我正在使用Observable<Void>但 rxjava2 不再允许它(https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0 -> Nulls)

现在,我已经绕过自定义类型(我称之为 NoContent)的 Json 解析,但我想知道是否有更好的方法。

编辑:

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();
        }
    }
}
4

1 回答 1

2

您可以使用Completable,Observable<ResponseBody>或者Observable<Response<T>>在您将获得204响应而不获得转换器异常的情况下。

这里最好的选择可能是Completable用作返回类型。来自服务器的所有2xx响应都将以onComplete. 其他将最终出现在onError.

如果ResponseBody所有类型的有效 HTTP 响应都不会转换为 Object 并且最终会出现在onNext, 包括4xx5xx响应中。

如果Response<T>只有 2xx 响应将被转换,可能包括 HTTP204响应代码。所以我不确定你应该使用它,尽管在这种情况下所有有效的 HTTP 响应也会以onNext, 包括4xx5xx响应结束。

于 2017-08-24T18:23:53.493 回答