2017-01-09 86 views
11

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

@POST("login") 
Observable<Void> getToken(@Header("Authorization") String authorization, 
             @Header("username") String username, 
             @Header("password") String password); 

但由于rxjava 2.X不会Void发出什么有没有什么好的做法来处理这些空洞的回应?

回答

24

Completable是为这种情况而设计的。它可用since 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); 

而且使用Observable<Object>重写你的用户,例如:

apiManager.getToken(auth, name, pass) 
    ... 
    .subscribe(() -> { 
     //success 
    }, exception -> { 
     //error 
    }); 
-1

你试试?

这是从RxJava 2的正式文档:

enum Irrelevant { INSTANCE; } 

Observable<Object> source = Observable.create((ObservableEmitter<Object> emitter) -> { 
    System.out.println("Side-effect 1"); 
    emitter.onNext(Irrelevant.INSTANCE); 

    System.out.println("Side-effect 2"); 
    emitter.onNext(Irrelevant.INSTANCE); 

    System.out.println("Side-effect 3"); 
    emitter.onNext(Irrelevant.INSTANCE); 
}); 

source.subscribe(e -> { /* Ignored. */ }, Throwable::printStackTrace); 
0

另一种解决方案是:

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