Android 用RxJava替换侦听器

Android 用RxJava替换侦听器,android,reactive-programming,rx-java,observable,rx-android,Android,Reactive Programming,Rx Java,Observable,Rx Android,目前,我正在研究向RxJava的迁移,并决定mineaccountManager的经理将是一个有趣的起点。当前,经理有一个侦听器列表,并在帐户更新和出现问题时发送相应的更新 private List<WeakReference<ProfileChangeListener>> mListeners = new ArrayList<>(); public interface ProfileChangeListener { void onProfileUp

目前,我正在研究向RxJava的迁移,并决定mineaccountManager的经理将是一个有趣的起点。当前,经理有一个侦听器列表,并在帐户更新和出现问题时发送相应的更新

private List<WeakReference<ProfileChangeListener>> mListeners = new ArrayList<>();

public interface ProfileChangeListener {
    void onProfileUpdated(Account account);
    void onProfileFailed(Exception e);
}
然后,当发生更新时,我调用以下命令之一:

private void onProfileUpdated(Account account) {
    mManagerSubject.onNext(account);
}

private void onProfileFailed(final Exception e) {
    mManagerSubject.onError(e);
}
发行

问题是,一旦调用onError,任何通过observe收听的人都将无法从onNext获得另一个更新

我仍然希望订阅者接收onError,以便他们能够处理错误状态,但是在稍后的时间,仍然可以使用更新的帐户调用onNext,并且我仍然希望订阅者能够处理更新的帐户

我尝试过使用OneRorResumeNext、OneRorReturn OneExceptionResumeNext的解决方案,但它们都没有传播OneRor


TLDR:在调用onError后,如何在传播onError的同时保持订阅用户订阅?

Rx中的错误一开始可能有点难以理解,因为它们的含义与大多数人所期望的略有不同

从重点矿井:

可观察对象通常不会抛出异常。相反,它通过使用onError通知终止可观察序列来通知任何观察者发生了不可恢复的错误

OneError应该在可观测对象遇到无法恢复的错误时使用,即当您的可观测对象无法继续发射项目时。当您订阅时,您可能会使用类似OneRorResumeNext的方法来尝试一些恢复操作,但这应该是源代码的结束

相反,您可能希望调整您的Observable发出的内容以支持发出错误项,或者包含一个指示遇到错误的标志

如果您的错误确实无法恢复,那么您可能需要重新审视您的恢复策略,并尝试一种稍微不同的方法

private void onProfileUpdated(Account account) {
    mManagerSubject.onNext(account);
}

private void onProfileFailed(final Exception e) {
    mManagerSubject.onError(e);
}