android - Retrofit observable 只工作一次

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

每次我调用 myApi.signin() 时,有没有办法告诉 retrofit/rxandroid 重新进行 http 调用。我的处理方式是否正确?

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

最佳答案

一旦 Subscriber#unsubscribe() 被调用,订阅者将永远无法接收新值。每次你想订阅一个新的可观察对象时,你都需要重新创建你的订阅者。

发生的事情是,在对 Subscriber#add(Subscription) 的调用中,它看到订阅者已经取消订阅并立即取消新订阅。

关于android - Retrofit observable 只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38820176/

相关文章:

android - Rx-Java 集中式错误处理

android - 我应该如何在 AndroidManifest.xml 中定义 launchMode - 使用 PhoneGap 和 JQM

android - Android 中具有分辨率参数的相机 Intent

java - 如何将Retrofit onResponse方法返回的Json数据发送到其他类?

android - Retrofit + rxandroid 导致 kitkat 出现 stackoverflow 错误

rx-java - Rxjava最短执行时间?

android - 如何从 Retrofit 获取响应 URL?

android - 在打开另一个 GPS 应用程序之前,Geofences 随机无法触发

android - 像开放API一样通过Retrofit请求

android - Retrofit 2 beta2 无法进行分段上传