rxjava-重录单只发射数据两次



我是Reactivex的新手,我希望我的观察力可以将数据发射到晚期订阅者(只要观察者订阅,可观察到的可观察到与之前发出的相同数据(。我做了这个可观察的类,该类向所有观察者提供了相同的实例(这是Singleton类(。

public class AccountsObservable {
    private static ConnectableObservable<String> hotObservable;
    private static AccountsObservable accountsObservable;

    public static AccountsObservable getObject() {
        if (accountsObservable == null) {
            accountsObservable = new AccountsObservable();
        }
        return accountsObservable;
    }
    public ConnectableObservable<String> getObservable() {
        if (hotObservable == null) {
            Observable<String> observable = ReplaySubject.create(new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                    emitter.onNext("XYZ");
                    emitter.onComplete();
                }
            });
            hotObservable = observable.replay();//publish
        }
        return hotObservable;
    }
}

同样,这是创建新观察者实例的观察者类。

public class AccountsObserver {
    AccountsFetchListener listener;
    public AccountsObserver(AccountsFetchListener listener) {
        this.listener = listener;
    }
    public Observer<String> getObserver() {
        return new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
            }
            @Override
            public void onNext(String accounts) {
                listener.onSuccess(accounts);
            }
            @Override
            public void onError(Throwable e) {
                listener.onFailure();
            }
            @Override
            public void onComplete() {
            }
        };
    }
    public interface AccountsFetchListener {
        void onSuccess(String accounts);
        void onFailure();
    }
}

这是我测试这些可观察力的功能

private void testObs() {
    ConnectableObservable<String> observable = AccountsObservable.getObject().getObservable();
    Observer<String> observer = new AccountsObserver(new AccountsObserver.AccountsFetchListener() {
        @Override
        public void onSuccess(String accounts) {
            Log.e("DATA -> ", accounts);
        }
        @Override
        public void onFailure() {
        }
    }).getObserver();
    observable.subscribe(observer);
    observable.connect();
}

我称此函数为" TestObs((" 5次,但仅发射了2次数据。这个问题似乎是在我提供reploaysubject实例的accountbservable类中。谢谢

您的代码运行正常,按照以下方式在logcat中被抑制:

,一旦每秒记录了超过5行,我们将其宣布为Chatty Too Chatty。请针对正在生产此开发人员 - 验尸级别的"级别记录垃圾邮件"的应用程序的所有者提出错误。日志为256KB,这意味着该应用程序正在创建DOS攻击,并将日志TimePAN缩短到6秒(!(,使其对所有其他人毫无用处。

您可以通过为logcat的应用程序进行白色应用程序来避免这种行为:

adb logcat -P '<pid or uid of your app>'

最新更新