对于RxJava来说我还很陌生,我需要使用几个数据源创建存储库。这对我来说很复杂,因为有几个较小的子任务,我不知道如何用RxJava来实现。
首先,我有一个自写的dao,它处理InputStream,并提供指定范围内的Items。目前,它只是在列表中收集数据,但我想使用flowable逐一提供Items;目前,它使用Maybe<List<Item>>
。另外,还需要将几个错误传输到更高级别(数据源)。例如EndOfFile,以通知DataSource数据已完全缓存;
Dao.class
:
List<Item> loadRange(int start, int number) throws ... {
...
while(...) {
...
//TODO contribute item to flowable
resultList.add(new Item(...))
}
return resultList;
}
Maybe<List<Item>>
方法刚刚创建Maybe.fromCallable()
;
请帮助我!
答案 0 :(得分:1)
类似的事情应该可以解决:
Flowable<Item> loadRange(int start, int number) {
return Flowable.create(emitter -> {
try {
while (...){
emitter.onNext(new Item());
}
emitter.onComplete();
} catch (IOException e) {
emitter.onError(e);
}
}, BackpressureStrategy.BUFFER);
}
我假设一旦循环完成,您就想完成,还向下游发送错误,而不是处理方法签名。另外,您可以更改BackPressureStrategy
以适合您的用例,即DROP
,LATEST
等。
当您不熟悉RxJava时,匿名类将是:
Flowable<Item> loadRange(int start, int number) {
return Flowable.create(new FlowableOnSubscribe<Item>() {
@Override public void subscribe(FlowableEmitter<Item> emitter) {
try {
while (...){
emitter.onNext(new Item());
}
emitter.onComplete();
} catch (IOException e) {
emitter.onError(e);
}
}
}, BackpressureStrategy.BUFFER);
}