0
私はRxを利用するためにライブラリ内のメソッドを書き換えています。以下のコード例は元のメソッドです。Rxを利用するための接続方法の書き換え
public void connect(ConnectionListener connectionListener) {
//......
RxBleDevice device = mRxBleClient.getBleDevice(builder.toString());
mEstablishedConnection = device.establishConnection(mContext, false)
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable -> {
throwable.printStackTrace();
connectionListener.onFailed();
Log.d(TAG, "Error establishing a connection" + throwable.getMessage());
})
.subscribe(rxBleConnection -> {
mConnection = rxBleConnection;
connectionListener.onConnected();
setNotifications();
Log.d(TAG, "Connection established. Status: " + device.getConnectionState().toString());
}, throwable -> {
if (throwable != null) {
throwable.printStackTrace();
}
});
}
私が最初に行くmEstablishedConnection
に保存するのではなく、Subscription
を返すようにしました。これは、ユーザーが切断をトリガーするために退会することができるようになる:上記と
public Subscription connect() {
//..
RxBleDevice device = mRxBleClient.getBleDevice(builder.toString());
return device.establishConnection(mContext, false)
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable -> {
throwable.printStackTrace();
Log.d(TAG, "Error establishing a connection" + throwable.getMessage());
})
.flatMap(rxBleConnection -> {
mConnection = rxBleConnection;
return Observable.empty();
})
.subscribe(o -> {
setNotifications();
Log.d(TAG, "Connection established. Status: " + device.getConnectionState().toString());
}, throwable -> {
if (throwable != null) {
throwable.printStackTrace();
}
});
}
問題は、私はきちんと戻って行うことがいいだろう、呼び出し元にエラーを伝播することができないということです。このメソッドをリアクティブにして呼び出し元にエラーを受けさせ、サードパーティクラスのRxBleConnection
を返すのではなく、このメソッドを書き直すにはどうすればよいですか?
これは私が考えていたものです。私はこれを行かせます。 – Orbit