我正在进行长写操作,一次发送16个字节的批处理。我希望有一个进度条显示长写入用户的进度,因此每次编写批处理时都需要进行某种回调。
从文档中看,setWriteOperationAckStrategy
看起来像这样。但是,在运行以下代码时,我最终只看到一条消息输出到日志。我在这里做错了什么?
subscription = connection.flatMap(rxBleConnection -> rxBleConnection.createNewLongWriteBuilder()
.setCharacteristicUuid(uuid)
.setBytes(bytes)
.setMaxBatchSize(16)
.setWriteOperationAckStrategy(new RxBleConnection.WriteOperationAckStrategy() {
@Override
public Observable<Boolean> call(Observable<Boolean> booleanObservable) {
Log.d("TEST", "batch written");
return booleanObservable;
}
})
.build()
答案 0 :(得分:1)
setWriteOperationAckStrategy类似于标准的RxJava的Observable变换器。为了保持较低的分配,我们倾向于修改源可观察性,而不是在每个批次完成时创建一个新的。
subscription = connection.flatMap(rxBleConnection -> rxBleConnection.createNewLongWriteBuilder()
.setCharacteristicUuid(uuid)
.setBytes(bytes)
.setMaxBatchSize(16)
.setWriteOperationAckStrategy(new RxBleConnection.WriteOperationAckStrategy() {
@Override
public Observable<Boolean> call(Observable<Boolean> booleanObservable) {
Log.d("TEST", "batch written");
return booleanObservable
.doOnNext(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
Log.d("TEST", "batch written");
}
});
}
})
.build()
答案 1 :(得分:1)
我认为这个答案是针对RxJava的,对于RxJava2,这是更新的lambda语法:
.setWriteOperationAckStrategy(booleanObservable -> {
Log.d("TEST", "batch written");
return booleanObservable
.doOnNext(aBoolean -> {
Log.d("TEST", "batch written");
});
}
完整:
.setWriteOperationAckStrategy(new RxBleConnection.WriteOperationAckStrategy() {
@Override
public Observable<Boolean> apply(Observable<Boolean> booleanObservable) {
Log.d("TEST", "batch written");
return booleanObservable
.doOnNext(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) {
Log.d("TEST", "batch written");
}
});
}