RxBluetooth
RxBluetooth copied to clipboard
Exceptions
Hi! I have problem with next:
-
I do close connect with BluetoothConnection and recive next exception to RX onError -> com.github.ivbaranov.rxbluetooth.exceptions.ConnectionClosedException Can't read stream at com.github.ivbaranov.rxbluetooth.BluetoothConnection$1.subscribe(BluetoothConnection.java88) at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java72) at io.reactivex.Flowable.subscribe(Flowable.java13234) at io.reactivex.internal.operators.flowable.FlowablePublish.connect(FlowablePublish.java130) at io.reactivex.internal.operators.flowable.FlowableRefCount.subscribeActual(FlowableRefCount.java138) at io.reactivex.Flowable.subscribe(Flowable.java13234) at io.reactivex.Flowable.subscribe(Flowable.java13183) at io.reactivex.internal.operators.flowable.FlowableLift.subscribeActual(FlowableLift.java49) at io.reactivex.Flowable.subscribe(Flowable.java13234) at io.reactivex.internal.operators.flowable.FlowableOnBackpressureBuffer.subscribeActual(FlowableOnBackpressureBuffer.java46) at io.reactivex.Flowable.subscribe(Flowable.java13234)
-
I do dispose to observeStringStream I again received above error in main thread.
Please fix problem with "UndeliverableException". E/UncaughtException: io.reactivex.exceptions.UndeliverableException: java.io.IOException: read failed, socket might closed or timeout, read ret: -1 at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367) at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:74) at com.github.ivbaranov.rxbluetooth.RxBluetooth$9$1.subscribe(RxBluetooth.java:514) at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40) at io.reactivex.Observable.subscribe(Observable.java:11442) at io.reactivex.internal.operators.observable.ObservableDefer.subscribeActual(ObservableDefer.java:39) at io.reactivex.Observable.subscribe(Observable.java:11442)
I recive this error if use dispose before connect to device with error. https://stackoverflow.com/questions/43525052/rxjava2-observable-take-throws-undeliverableexception
Maybe replace onError to tryOnError
Use 'RxJavaPlugins.setErrorHandler()`
fun connect(){
rxBluetooth.observeConnectionState()
.filter { it.state == BluetoothAdapter.STATE_CONNECTED }
.subscribe(
{ onConnected() },
{ it.printStackTrace() })
rxBluetooth.observeConnectionState()
.filter { it.state == BluetoothAdapter.STATE_DISCONNECTED }
.subscribe(
{ onDisconnected() },
{ it.printStackTrace() })
}
fun onConnected() {
readDisposable = bluetoothConnection.observeByteStream()
.subscribeOn(Schedulers.computation())
.subscribe(
{
// do something
},
{ it.printStackTrace() })
bluetoothConnection.send("111")
}
fun onDisconnected(){
readDisposable.dispose()
}
then go to Bluetooth setup on phone -> tap connected device -> disconnect -> power off device -> app crash
W: io.reactivex.exceptions.UndeliverableException: com.github.ivbaranov.rxbluetooth.exceptions.ConnectionClosedException: Can't read stream
W: at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
W: at io.reactivex.internal.operators.flowable.FlowableCreate$BaseEmitter.onError(FlowableCreate.java:276)
W: at com.github.ivbaranov.rxbluetooth.BluetoothConnection$1.subscribe(BluetoothConnection.java:90)
W: at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:72)
W: at io.reactivex.Flowable.subscribe(Flowable.java:14409)
W: at io.reactivex.internal.operators.flowable.FlowablePublish.connect(FlowablePublish.java:130)
W: at io.reactivex.internal.operators.flowable.FlowableRefCount.subscribeActual(FlowableRefCount.java:91)
W: at io.reactivex.Flowable.subscribe(Flowable.java:14409)
W: at io.reactivex.Flowable.subscribe(Flowable.java:14356)
W: at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
W: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
W: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
W: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
W: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
W: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
W: at java.lang.Thread.run(Thread.java:761)
W: Caused by: com.github.ivbaranov.rxbluetooth.exceptions.ConnectionClosedException: Can't read stream
W: ... 15 more
W: Caused by: java.io.IOException: bt socket closed, read return: -1
W: at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:588)
W: at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:60)
W: at com.github.ivbaranov.rxbluetooth.BluetoothConnection$1.subscribe(BluetoothConnection.java:87)
W: ... 14 more
E: FATAL EXCEPTION: RxComputationThreadPool-3
Process: kr.co.bluec.mate, PID: 7088
io.reactivex.exceptions.UndeliverableException: com.github.ivbaranov.rxbluetooth.exceptions.ConnectionClosedException: Can't read stream
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
at io.reactivex.internal.operators.flowable.FlowableCreate$BaseEmitter.onError(FlowableCreate.java:276)
at com.github.ivbaranov.rxbluetooth.BluetoothConnection$1.subscribe(BluetoothConnection.java:90)
at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:72)
at io.reactivex.Flowable.subscribe(Flowable.java:14409)
at io.reactivex.internal.operators.flowable.FlowablePublish.connect(FlowablePublish.java:130)
at io.reactivex.internal.operators.flowable.FlowableRefCount.subscribeActual(FlowableRefCount.java:91)
at io.reactivex.Flowable.subscribe(Flowable.java:14409)
at io.reactivex.Flowable.subscribe(Flowable.java:14356)
at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
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.github.ivbaranov.rxbluetooth.exceptions.ConnectionClosedException: Can't read stream
at com.github.ivbaranov.rxbluetooth.BluetoothConnection$1.subscribe(BluetoothConnection.java:90)
at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:72)
at io.reactivex.Flowable.subscribe(Flowable.java:14409)
at io.reactivex.internal.operators.flowable.FlowablePublish.connect(FlowablePublish.java:130)
at io.reactivex.internal.operators.flowable.FlowableRefCount.subscribeActual(FlowableRefCount.java:91)
at io.reactivex.Flowable.subscribe(Flowable.java:14409)
at io.reactivex.Flowable.subscribe(Flowable.java:14356)
at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
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: java.io.IOException: bt socket closed, read return: -1
at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:588)
at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:60)
at com.github.ivbaranov.rxbluetooth.BluetoothConnection$1.subscribe(BluetoothConnection.java:87)
at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:72)
at io.reactivex.Flowable.subscribe(Flowable.java:14409)
at io.reactivex.internal.operators.flowable.FlowablePublish.connect(FlowablePublish.java:130)
at io.reactivex.internal.operators.flowable.FlowableRefCount.subscribeActual(FlowableRefCount.java:91)
at io.reactivex.Flowable.subscribe(Flowable.java:14409)
at io.reactivex.Flowable.subscribe(Flowable.java:14356)
at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
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)
so I add RxJavaPlugins.setErrorHandler { it.printStackTrace() } to 'inherit Application class` then fixed it.