RxBluetooth icon indicating copy to clipboard operation
RxBluetooth copied to clipboard

Exceptions

Open JajaComp opened this issue 7 years ago • 3 comments

Hi! I have problem with next:

  1. 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)

  2. I do dispose to observeStringStream I again received above error in main thread.

JajaComp avatar Feb 22 '18 13:02 JajaComp

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

JajaComp avatar Feb 27 '18 11:02 JajaComp

Maybe replace onError to tryOnError

JajaComp avatar Feb 27 '18 11:02 JajaComp

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.

NunciosChums avatar Jan 07 '19 02:01 NunciosChums