RxAndroidBle: Crash when trying to connect too fast [UndeliverableException]
lib version 1.5 rx2 I am facing issue in my app and in the sample app but i cannot find where the issue source is.
To reproduce, it’s really easy, you have to try a connection just right after reactivate Bluetooth on the device (about 1 sec after). I think the GATT stack is not really ready but in fact it throw a disconnection although the connection process is not done. it’s seems that a exception is not handle and rx is not happy but i am not sure.
logs :
03-08 14:47:18.292 11563-11677/com.polidea.rxandroidble.sample I/RxBle#ConnectionOperationQueue: Connection operations queue to be terminated (AA:BB:CC:11:22:33)
03-08 14:47:18.295 11563-11676/com.polidea.rxandroidble.sample D/RxBle#Executors$RunnableAdapter: Terminated.
03-08 14:47:18.297 11563-11677/com.polidea.rxandroidble.sample D/RxBle#ClientOperationQueue: QUEUED ConnectOperation(154038096)
03-08 14:47:18.298 11563-11580/com.polidea.rxandroidble.sample D/RxBle#ClientOperationQueue: STARTED ConnectOperation(154038096)
03-08 14:47:18.302 11563-11677/com.polidea.rxandroidble.sample D/RxBle#ClientOperationQueue: QUEUED DisconnectOperation(110097737)
03-08 14:47:18.303 11563-11586/com.polidea.rxandroidble.sample W/System.err: io.reactivex.exceptions.UndeliverableException: com.polidea.rxandroidble2.exceptions.BleDisconnectedException: Disconnected from AA:BB:CC:11:22:33
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:366)
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:67)
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onError(ObservableSubscribeOn.java:63)
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:85)
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:73)
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.util.DisposableUtil$3.onError(DisposableUtil.java:60)
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.single.SingleDoFinally$DoFinallyObserver.onError(SingleDoFinally.java:81)
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.onError(SingleTimeout.java:142)
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.single.SingleCreate$Emitter.tryOnError(SingleCreate.java:95)
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.single.SingleCreate$Emitter.onError(SingleCreate.java:81)
03-08 14:47:18.304 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.util.DisposableUtil$1.onError(DisposableUtil.java:24)
03-08 14:47:18.305 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableElementAtSingle$ElementAtSubscriber.onError(FlowableElementAtSingle.java:101)
03-08 14:47:18.305 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.checkTerminate(FlowableFlatMap.java:566)
03-08 14:47:18.305 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.drainLoop(FlowableFlatMap.java:374)
03-08 14:47:18.305 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.drain(FlowableFlatMap.java:366)
03-08 14:47:18.305 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.innerError(FlowableFlatMap.java:605)
03-08 14:47:18.305 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMap$InnerSubscriber.onError(FlowableFlatMap.java:668)
03-08 14:47:18.306 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onError(SingleToFlowable.java:68)
03-08 14:47:18.306 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableElementAtSingle$ElementAtObserver.onError(ObservableElementAtSingle.java:104)
03-08 14:47:18.306 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate(ObservableFlatMap.java:495)
03-08 14:47:18.306 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop(ObservableFlatMap.java:331)
03-08 14:47:18.306 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain(ObservableFlatMap.java:323)
03-08 14:47:18.306 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:571)
03-08 14:47:18.306 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:63)
03-08 14:47:18.306 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableError.subscribeActual(ObservableError.java:37)
03-08 14:47:18.306 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.util.NotificationLite.accept(NotificationLite.java:246)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableCache$ReplayDisposable.replay(ObservableCache.java:350)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableCache.subscribeActual(ObservableCache.java:85)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap.subscribeActual(ObservableFlatMap.java:55)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableElementAtSingle.subscribeActual(ObservableElementAtSingle.java:37)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Single.subscribe(Single.java:3096)
03-08 14:47:18.307 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.single.SingleToFlowable.subscribeActual(SingleToFlowable.java:37)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Flowable.subscribe(Flowable.java:13234)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Flowable.subscribe(Flowable.java:13180)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:163)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFromArray$ArraySubscription.fastPath(FlowableFromArray.java:134)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFromArray$BaseArraySubscription.request(FlowableFromArray.java:87)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onSubscribe(FlowableFlatMap.java:115)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFromArray.subscribeActual(FlowableFromArray.java:37)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Flowable.subscribe(Flowable.java:13234)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Flowable.subscribe(Flowable.java:13180)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableFlatMapPublisher.subscribeActual(FlowableFlatMapPublisher.java:43)
03-08 14:47:18.308 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Flowable.subscribe(Flowable.java:13234)
03-08 14:47:18.309 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.flowable.FlowableElementAtSingle.subscribeActual(FlowableElementAtSingle.java:41)
03-08 14:47:18.309 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Single.subscribe(Single.java:3096)
03-08 14:47:18.309 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Single.subscribeWith(Single.java:3140)
03-08 14:47:18.309 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.operations.ConnectOperation$4.subscribe(ConnectOperation.java:144)
03-08 14:47:18.309 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)
03-08 14:47:18.309 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Single.subscribe(Single.java:3096)
03-08 14:47:18.310 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.single.SingleTimeout.subscribeActual(SingleTimeout.java:53)
03-08 14:47:18.310 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Single.subscribe(Single.java:3096)
03-08 14:47:18.310 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.single.SingleDoFinally.subscribeActual(SingleDoFinally.java:46)
03-08 14:47:18.310 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Single.subscribe(Single.java:3096)
03-08 14:47:18.311 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Single.subscribeWith(Single.java:3140)
03-08 14:47:18.313 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.operations.ConnectOperation.protectedRun(ConnectOperation.java:79)
03-08 14:47:18.313 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
03-08 14:47:18.313 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
03-08 14:47:18.313 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.314 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
03-08 14:47:18.314 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
03-08 14:47:18.314 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
03-08 14:47:18.314 11563-11586/com.polidea.rxandroidble.sample W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-08 14:47:18.314 11563-11586/com.polidea.rxandroidble.sample W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
03-08 14:47:18.314 11563-11586/com.polidea.rxandroidble.sample W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
03-08 14:47:18.314 11563-11586/com.polidea.rxandroidble.sample W/System.err: at java.lang.Thread.run(Thread.java:761)
03-08 14:47:18.315 11563-11586/com.polidea.rxandroidble.sample W/System.err: Caused by: com.polidea.rxandroidble2.exceptions.BleDisconnectedException: Disconnected from AA:BB:CC:11:22:33
03-08 14:47:18.315 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.connection.DisconnectionRouter$1.apply(DisconnectionRouter.java:38)
03-08 14:47:18.315 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.connection.DisconnectionRouter$1.apply(DisconnectionRouter.java:35)
03-08 14:47:18.315 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:59)
03-08 14:47:18.315 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFilter$FilterObserver.onNext(ObservableFilter.java:52)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.drain(ObservableConcatMap.java:464)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.onSubscribe(ObservableConcatMap.java:324)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFromArray.subscribeActual(ObservableFromArray.java:30)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableConcatMap.subscribeActual(ObservableConcatMap.java:54)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFilter.subscribeActual(ObservableFilter.java:30)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableMap.subscribeActual(ObservableMap.java:33)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)
03-08 14:47:18.316 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFromArray$FromArrayDisposable.run(ObservableFromArray.java:107)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFromArray.subscribeActual(ObservableFromArray.java:36)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap.subscribeActual(ObservableFlatMap.java:55)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableElementAt.subscribeActual(ObservableElementAt.java:36)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableCache$CacheState.connect(ObservableCache.java:216)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableCache.subscribeActual(ObservableCache.java:82)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11180)
03-08 14:47:18.317 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11058)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.connection.DisconnectionRouter.<init>(DisconnectionRouter.java:60)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.connection.DisconnectionRouter_Factory.get(DisconnectionRouter_Factory.java:33)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.connection.DisconnectionRouter_Factory.get(DisconnectionRouter_Factory.java:10)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at bleshadow.dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.connection.RxBleGattCallback_Factory.get(RxBleGattCallback_Factory.java:33)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.connection.RxBleGattCallback_Factory.get(RxBleGattCallback_Factory.java:8)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at bleshadow.dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.DaggerClientComponent$DeviceComponentImpl$ConnectionComponentImpl.connectOperation(DaggerClientComponent.java:713)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.connection.ConnectorImpl$1.call(ConnectorImpl.java:56)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.internal.connection.ConnectorImpl$1.call(ConnectorImpl.java:41)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableDefer.subscribeActual(ObservableDefer.java:32)
03-08 14:47:18.318 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableDoFinally.subscribeActual(ObservableDoFinally.java:45)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableDefer.subscribeActual(ObservableDefer.java:39)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableTakeUntil.subscribeActual(ObservableTakeUntil.java:41)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableObserveOn.subscribeActual(ObservableObserveOn.java:45)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.internal.operators.observable.ObservableDoFinally.subscribeActual(ObservableDoFinally.java:45)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11180)
03-08 14:47:18.319 11563-11586/com.polidea.rxandroidble.sample W/System.err: at io.reactivex.Observable.subscribe(Observable.java:11109)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.sample.example2_connection.ConnectionExampleActivity.onConnectToggleClick(ConnectionExampleActivity.java:52)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.polidea.rxandroidble2.sample.example2_connection.ConnectionExampleActivity_ViewBinding$1.doClick(ConnectionExampleActivity_ViewBinding.java:43)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at android.view.View.performClick(View.java:5637)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at android.view.View$PerformClick.run(View.java:22429)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at android.os.Handler.handleCallback(Handler.java:751)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at android.os.Looper.loop(Looper.java:154)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6119)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
03-08 14:47:18.320 11563-11586/com.polidea.rxandroidble.sample W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
03-08 14:47:18.322 11563-11586/com.polidea.rxandroidble.sample E/AndroidRuntime: FATAL EXCEPTION: pool-1-thread-1
Process: com.polidea.rxandroidble.sample, PID: 11563
io.reactivex.exceptions.UndeliverableException: com.polidea.rxandroidble2.exceptions.BleDisconnectedException: Disconnected from AA:BB:CC:11:22:33
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:366)
at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:67)
at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onError(ObservableSubscribeOn.java:63)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:85)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:73)
at com.polidea.rxandroidble2.internal.util.DisposableUtil$3.onError(DisposableUtil.java:60)
at io.reactivex.internal.operators.single.SingleDoFinally$DoFinallyObserver.onError(SingleDoFinally.java:81)
at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.onError(SingleTimeout.java:142)
at io.reactivex.internal.operators.single.SingleCreate$Emitter.tryOnError(SingleCreate.java:95)
at io.reactivex.internal.operators.single.SingleCreate$Emitter.onError(SingleCreate.java:81)
at com.polidea.rxandroidble2.internal.util.DisposableUtil$1.onError(DisposableUtil.java:24)
at io.reactivex.internal.operators.flowable.FlowableElementAtSingle$ElementAtSubscriber.onError(FlowableElementAtSingle.java:101)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.checkTerminate(FlowableFlatMap.java:566)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.drainLoop(FlowableFlatMap.java:374)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.drain(FlowableFlatMap.java:366)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.innerError(FlowableFlatMap.java:605)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$InnerSubscriber.onError(FlowableFlatMap.java:668)
at io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onError(SingleToFlowable.java:68)
at io.reactivex.internal.operators.observable.ObservableElementAtSingle$ElementAtObserver.onError(ObservableElementAtSingle.java:104)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate(ObservableFlatMap.java:495)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop(ObservableFlatMap.java:331)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain(ObservableFlatMap.java:323)
at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:571)
at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:63)
at io.reactivex.internal.operators.observable.ObservableError.subscribeActual(ObservableError.java:37)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)
at io.reactivex.internal.util.NotificationLite.accept(NotificationLite.java:246)
at io.reactivex.internal.operators.observable.ObservableCache$ReplayDisposable.replay(ObservableCache.java:350)
at io.reactivex.internal.operators.observable.ObservableCache.subscribeActual(ObservableCache.java:85)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableFlatMap.subscribeActual(ObservableFlatMap.java:55)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableElementAtSingle.subscribeActual(ObservableElementAtSingle.java:37)
at io.reactivex.Single.subscribe(Single.java:3096)
03-08 14:47:18.324 11563-11586/com.polidea.rxandroidble.sample E/AndroidRuntime: at io.reactivex.internal.operators.single.SingleToFlowable.subscribeActual(SingleToFlowable.java:37)
at io.reactivex.Flowable.subscribe(Flowable.java:13234)
at io.reactivex.Flowable.subscribe(Flowable.java:13180)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:163)
at io.reactivex.internal.operators.flowable.FlowableFromArray$ArraySubscription.fastPath(FlowableFromArray.java:134)
at io.reactivex.internal.operators.flowable.FlowableFromArray$BaseArraySubscription.request(FlowableFromArray.java:87)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onSubscribe(FlowableFlatMap.java:115)
at io.reactivex.internal.operators.flowable.FlowableFromArray.subscribeActual(FlowableFromArray.java:37)
at io.reactivex.Flowable.subscribe(Flowable.java:13234)
at io.reactivex.Flowable.subscribe(Flowable.java:13180)
at io.reactivex.internal.operators.flowable.FlowableFlatMapPublisher.subscribeActual(FlowableFlatMapPublisher.java:43)
at io.reactivex.Flowable.subscribe(Flowable.java:13234)
at io.reactivex.internal.operators.flowable.FlowableElementAtSingle.subscribeActual(FlowableElementAtSingle.java:41)
at io.reactivex.Single.subscribe(Single.java:3096)
at io.reactivex.Single.subscribeWith(Single.java:3140)
at com.polidea.rxandroidble2.internal.operations.ConnectOperation$4.subscribe(ConnectOperation.java:144)
at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)
at io.reactivex.Single.subscribe(Single.java:3096)
at io.reactivex.internal.operators.single.SingleTimeout.subscribeActual(SingleTimeout.java:53)
at io.reactivex.Single.subscribe(Single.java:3096)
at io.reactivex.internal.operators.single.SingleDoFinally.subscribeActual(SingleDoFinally.java:46)
at io.reactivex.Single.subscribe(Single.java:3096)
at io.reactivex.Single.subscribeWith(Single.java:3140)
at com.polidea.rxandroidble2.internal.operations.ConnectOperation.protectedRun(ConnectOperation.java:79)
at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: com.polidea.rxandroidble2.exceptions.BleDisconnectedException: Disconnected from AA:BB:CC:11:22:33
at com.polidea.rxandroidble2.internal.connection.DisconnectionRouter$1.apply(DisconnectionRouter.java:38)
at com.polidea.rxandroidble2.internal.connection.DisconnectionRouter$1.apply(DisconnectionRouter.java:35)
at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:59)
at io.reactivex.internal.operators.observable.ObservableFilter$FilterObserver.onNext(ObservableFilter.java:52)
at io.reactivex.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.drain(ObservableConcatMap.java:464)
at io.reactivex.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.onSubscribe(ObservableConcatMap.java:324)
at io.reactivex.internal.operators.observable.ObservableFromArray.subscribeActual(ObservableFromArray.java:30)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableConcatMap.subscribeActual(ObservableConcatMap.java:54)
at io.reactivex.Observable.subscribe(Observable.java:11194)
03-08 14:47:18.328 11563-11586/com.polidea.rxandroidble.sample E/AndroidRuntime: at io.reactivex.internal.operators.observable.ObservableFilter.subscribeActual(ObservableFilter.java:30)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableMap.subscribeActual(ObservableMap.java:33)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)
at io.reactivex.internal.operators.observable.ObservableFromArray$FromArrayDisposable.run(ObservableFromArray.java:107)
at io.reactivex.internal.operators.observable.ObservableFromArray.subscribeActual(ObservableFromArray.java:36)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableFlatMap.subscribeActual(ObservableFlatMap.java:55)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableElementAt.subscribeActual(ObservableElementAt.java:36)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableCache$CacheState.connect(ObservableCache.java:216)
at io.reactivex.internal.operators.observable.ObservableCache.subscribeActual(ObservableCache.java:82)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.Observable.subscribe(Observable.java:11180)
at io.reactivex.Observable.subscribe(Observable.java:11058)
at com.polidea.rxandroidble2.internal.connection.DisconnectionRouter.<init>(DisconnectionRouter.java:60)
at com.polidea.rxandroidble2.internal.connection.DisconnectionRouter_Factory.get(DisconnectionRouter_Factory.java:33)
at com.polidea.rxandroidble2.internal.connection.DisconnectionRouter_Factory.get(DisconnectionRouter_Factory.java:10)
at bleshadow.dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.polidea.rxandroidble2.internal.connection.RxBleGattCallback_Factory.get(RxBleGattCallback_Factory.java:33)
at com.polidea.rxandroidble2.internal.connection.RxBleGattCallback_Factory.get(RxBleGattCallback_Factory.java:8)
at bleshadow.dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.polidea.rxandroidble2.DaggerClientComponent$DeviceComponentImpl$ConnectionComponentImpl.connectOperation(DaggerClientComponent.java:713)
at com.polidea.rxandroidble2.internal.connection.ConnectorImpl$1.call(ConnectorImpl.java:56)
at com.polidea.rxandroidble2.internal.connection.ConnectorImpl$1.call(ConnectorImpl.java:41)
at io.reactivex.internal.operators.observable.ObservableDefer.subscribeActual(ObservableDefer.java:32)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableDoFinally.subscribeActual(ObservableDoFinally.java:45)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableDefer.subscribeActual(ObservableDefer.java:39)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableTakeUntil.subscribeActual(ObservableTakeUntil.java:41)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableObserveOn.subscribeActual(ObservableObserveOn.java:45)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableDoFinally.subscribeActual(ObservableDoFinally.java:45)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.Observable.subscribe(Observable.java:11180)
at io.reactivex.Observable.subscribe(Observable.java:11109)
at com.polidea.rxandroidble2.sample.example2_connection.ConnectionExampleActivity.onConnectToggleClick(ConnectionExampleActivity.java:52)
03-08 14:47:18.328 11563-11586/com.polidea.rxandroidble.sample E/AndroidRuntime: at com.polidea.rxandroidble2.sample.example2_connection.ConnectionExampleActivity_ViewBinding$1.doClick(ConnectionExampleActivity_ViewBinding.java:43)
at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
03-08 14:47:18.334 11563-11586/com.polidea.rxandroidble.sample D/Error: ERR: exClass=com.polidea.rxandroidble2.exceptions.BleDisconnectedException
03-08 14:47:18.334 11563-11586/com.polidea.rxandroidble.sample D/Error: ERR: exMsg=Disconnected from AA:BB:CC:11:22:33
03-08 14:47:18.334 11563-11586/com.polidea.rxandroidble.sample D/Error: ERR: file=DisconnectionRouter.java
03-08 14:47:18.334 11563-11586/com.polidea.rxandroidble.sample D/Error: ERR: class=com.polidea.rxandroidble2.internal.connection.DisconnectionRouter$1
03-08 14:47:18.334 11563-11586/com.polidea.rxandroidble.sample D/Error: ERR: method=apply line=38
03-08 14:47:18.335 11563-11586/com.polidea.rxandroidble.sample D/Error: ERR: stack=io.reactivex.exceptions.UndeliverableException: com.polidea.rxandroidble2.exceptions.BleDisconnectedException: Disconnected from AA:BB:CC:11:22:33
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:366)
at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:67)
at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onError(ObservableSubscribeOn.java:63)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:85)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:73)
at com.polidea.rxandroidble2.internal.util.DisposableUtil$3.onError(DisposableUtil.java:60)
at io.reactivex.internal.operators.single.SingleDoFinally$DoFinallyObserver.onError(SingleDoFinally.java:81)
at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.onError(SingleTimeout.java:142)
at io.reactivex.internal.operators.single.SingleCreate$Emitter.tryOnError(SingleCreate.java:95)
at io.reactivex.internal.operators.single.SingleCreate$Emitter.onError(SingleCreate.java:81)
at com.polidea.rxandroidble2.internal.util.DisposableUtil$1.onError(DisposableUtil.java:24)
at io.reactivex.internal.operators.flowable.FlowableElementAtSingle$ElementAtSubscriber.onError(FlowableElementAtSingle.java:101)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.checkTerminate(FlowableFlatMap.java:566)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.drainLoop(FlowableFlatMap.java:374)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.drain(FlowableFlatMap.java:366)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.innerError(FlowableFlatMap.java:605)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$InnerSubscriber.onError(FlowableFlatMap.java:668)
at io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onError(SingleToFlowable.java:68)
at io.reactivex.internal.operators.observable.ObservableElementAtSingle$ElementAtObserver.onError(ObservableElementAtSingle.java:104)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate(ObservableFlatMap.java:495)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop(ObservableFlatMap.java:331)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain(ObservableFlatMap.java:323)
at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:571)
at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:63)
at io.reactivex.internal.operators.observable.ObservableError.subscribeActual(ObservableError.java:37)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)
at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)
at io.reactivex.internal.util.NotificationLite.accept(NotificationLite.java:246)
at io.reactivex.internal.operators.observable.ObservableCache$ReplayDisposable.replay(ObservableCache.java:350)
at io.reactivex.internal.operators.observable.ObservableCache.subscribeActual(ObservableCache.java:85)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableFlatMap.subscribeActual(ObservableFlatMap.java:55)
at io.reactivex.Observable.subscribe(Observable.java:11194)
at io.reactivex.internal.operators.observable.ObservableElementAtSingle.subscribeActual(ObservableElementAtSingle.java:37)
at io.reactivex.Single.subscribe(Single.java:3096)
at io.reactivex.internal.operators.single.SingleToFlowable.subscribeActual(SingleToFlowable.java:37)
at io.reactivex.Flowable.subscribe(Fl
03-08 14:47:18.335 11563-11586/com.polidea.rxandroidble.sample D/Error: ERR: TOTAL BYTES WRITTEN: 25616
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 60 (15 by maintainers)
Commits related to this issue
- [#383] Due to a way how RxJava2 handles undeliverable exceptions small changes to emitter based observers were required. — committed to dariuszseweryn/RxAndroidBle by uKL 6 years ago
- [#383] Due to a way how RxJava2 handles undeliverable exceptions small changes to emitter based observers were required. (#389) — committed to dariuszseweryn/RxAndroidBle by uKL 6 years ago
- [#383] Trying to fix undeliverable exception when disposing MTU watcher. — committed to dariuszseweryn/RxAndroidBle by uKL 6 years ago
- [#383] Trying to fix undeliverable exception when disposing MTU watcher. (#393) * [#383] Trying to fix undeliverable exception when disposing MTU watcher. * Retry only on MTU related errors. — committed to dariuszseweryn/RxAndroidBle by uKL 6 years ago
Hello everyone,
I was investigating this issue recently.
The root cause of the problem is the threading of Android OS — callbacks may be called on arbitrary threads. The library does not know how it will be used and thus it is routing errors to all listeners. Because the errors sometimes may be routed through many merged observables they may appear more than once in an observable chain…
One of the differences between
RxJava 1
andRxJava 2
is that the former did swallow exceptions that happened after the chain was unsubscribed whereas the latter is throwing anUndeliverableException
in this situation. With the current library architecture it is impossible to mitigate this behaviour and the suggested workaround is to add a code similar to what @thuytrinh wrote above:Kotlin
Java
We’ve seen these
BleDisconnectedException
s wrapped inUndeliverableException
in our projects for a while now, when using RxJava2.This happens when you dispose of the subscription while a disconnect takes place. The RxAndroidBle code delivers this exception just before your code disposes of the subscription but was about to reach your just-disposed error-handler just after your code disposes of it.
We worked around this by registering an uncaught-exception handler by calling
RxJavaPlugins.setErrorHandler
and handling theUndeliverableException
appropriately. The handler we used just logged the uncaught-exception, but did not let the app crash.Thank you for the suggestion. Unfortunately this is not the case in this library since the wrapped error is usually
BleDisconnectedException
. It happens due to the exception being routed to everyObservable
/Single
/Completable
derived fromRxBleConnection
.If the user creates a single
Observable
from multiple others derived fromRxBleConnection
— theBleDisconnectedException
will get emitted from all of them and only one will get handled by theSubscriber
. The rest will get routed asUndeliverableExceptions
— I have an idea on how to mitigate this problem but it will make the library harder to use — the user would need to think on where they want to get the error routed in their chain ofObservable
s. And it could potentially drastically alter the API where if error is not routed to a particular place then e.g. aMaybe
would be returned instead ofSingle
.This approach needs to get evaluated.
I had a few time exception error on the disconnection with the last snapshot :
Then I am not alone. I was just about to paste an almost identical stacktrace.
I too have a call to connect again directly from my onConnectionFailure handler because I generally want to re-establish the connection ASAP.
E.g. this is the meat of my connection method.
Side note: doOnDispose does not appear to be called in the way doOnUnsubscribe is called in rx1 land. It is in fact not called at all for me, but I have also not looked enough at the RXJava guides to know if it should be.
Just in case my trace adds some value, here it is:
@cuiti Yes that is right. You get an unhandled exception when you try to rethrow the error in Java.
I’m using the folowing in my project:
rxandroidble2 v1.5.0 @uKL Got the same error when trying to retry the connection. Any updates?
I believe you’re not looking at
master
branch. It’s already tryOnError (which in fact does the same inside).Been there 😃
In fact, I aligned your example to work with a SensorTAG. The issue seems to be still there. I’ll try to chase it down.
I will try, I’ll update the thread when I have news.