如何使用 RxJava2 和 Retrofit2 处理无内容响应

Rom*_*ain 5 android retrofit2 rx-java2

我正在使用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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Кла*_*арц 2

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

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

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

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