通过改造和rxjava 2.x处理空响应

Sam*_*net 21 android rx-java rx-java2

当使用rxjava 1.xi用于返回Observable<Void>处理来自改造的空响应时:

@POST( "login" )
Observable<Void> getToken( @Header( "Authorization" ) String authorization,
                                       @Header( "username" ) String username,
                                       @Header( "password" ) String password );
Run Code Online (Sandbox Code Playgroud)

但是因为rxjava 2.x不会发出任何东西,Void是否有任何好的做法来处理那些空的响应?

Mak*_*dov 38

Completable是为这种情况设计的.它 RxJava 1.1.1 可用.来自官方文档:

表示没有任何值的延迟计算,但仅表示完成或异常.该类遵循与Reactive-Streams类似的事件模式:onSubscribe(onError | onComplete)?

所以只需更改方法的返回类型:

@POST("login")
Completable getToken(@Header("Authorization") String authorization,
                     @Header("username")      String username,
                     @Header("password")      String password);
Run Code Online (Sandbox Code Playgroud)

并重写您的订阅者,例如:

apiManager.getToken(auth, name, pass)
    ...
    .subscribe(() -> {
        //success
    }, exception -> {
        //error
    });
Run Code Online (Sandbox Code Playgroud)


Leo*_*der 6

另一个解决方案是:

@POST("login")
Observable<Response<Void>> getToken( @Header( "Authorization" ) String authorization,
                                       @Header( "username" ) String username,
                                       @Header( "password" ) String password );
Run Code Online (Sandbox Code Playgroud)