RxJava излучатель нет ответа - PullRequest
0 голосов
/ 04 июля 2019

Я попробовал технологию опроса BLE с Rx в Android. Нужно два ObservableStream. (Протокол PDL и протокол PDR) Каждый протокол (поток) выполняется каждые 3 секунды с независимым. Но BLE Controller только один. Так что можно разбить каждый поток.

Я отправляю данные (PDL) в 1сек. И я отправляю данные (PDR) одновременно. тогда BLE не является ответом на более поздние данные. Таким образом, позже прибыл Данные не отвечают данные (ничего)

Как повторить попытку, если Emitter не переотложен?

Может быть, я думаю, что для излучателя нужно время асинхронности так что если доступ к времени асинхронный, то повторите. Я пробовал один () поток. Поэтому я хочу, чтобы не врезаться. Но это не работает. Я думаю, что каждый поток не работает в одном потоке.

public Observable<String> get(String protocol) {
        return Observable.create(emitter -> {
            bluetoothModule.sendProtocol(protocol, new BluetoothModule.BluetoothWriteImpl() {
                @Override
                public void onSuccessWrite(int status, String data) {
                    if (TextUtils.isEmpty(data)) {
                        emitter.onComplete();
                    }
                    emitter.onNext(data);
                }

                @Override
                public void onFailed(Exception e) {
                    emitter.onComplete();
                }
            });
        });
    }


Observable.just("PDR")
                    .flatMap(this::get)
                    .filter(it -> it.startsWith("<") || it.endsWith(">"))
                    .take(2)
                    .reduce((a, b) -> a + b)
                    .filter(it -> it.startsWith("<") && it.endsWith(">") && it.length() == 20)
                    .subscribeOn(Schedulers.single())
                    .observeOn(AndroidSchedulers.mainThread())
                    .repeatWhen(o -> o.delay(3000, TimeUnit.MILLISECONDS))
                    .subscribe(it -> {});
...