改造可观察的作品只有一次

时间:2016-08-08 01:38:07

标签: android retrofit rx-android

据我所知,默认情况下,通过改造创建的可观察量是"冷"可观测量。

我对我的服务器端点进行了这个特定的调用

@POST("oauth/token")
Observable<Token> signIn(@Field("username") String username, @Field("password") String password);

当我这样做时:

public class LoginUseCase extends Subscriber<Profile> {
    public void logIn(String username, String password) {
        Subscription subscription = myApi.signIn(username, password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(this);
        this.add(subscription);
    }
}

我收到了onNext onError onComplete个回调,正如您所期望的那样。

登录失败时出现问题,我再试一次。第二次拨打login()方法不会触发http呼叫,我也不会收到任何回叫。

顺便说一句,我是在我的onComplete()方法

上做的
@Override
public void onCompleted() {
    this.unsubscribe();
}

有没有办法告诉retrofit / rxandroid每次调用myApi.signin()时重新进行http调用。我是否正确地接近这个?

注意: - 我在我的项目中使用dagger2,而myApi对象是一个单例。 - 即使我在第一次和第二次尝试之间使用不同的用户名/通行证配置,我也能够重现错误

1 个答案:

答案 0 :(得分:4)

调用Subscriber#unsubscribe()后,订阅者永远不会收到新值。每次要订阅新的可观察对象时,都需要重新创建订阅者。

正在发生的事情是,在Subscriber#add(Subscription)的来电中,它看到订阅者已被取消订阅并立即取消新订阅。