当我使用debounce()时,然后从后端和数据中获取数据
我想转换为另一个数据,最后使用toList().
当我使用toList()没有任何事情发生没有任何日志不在订阅和错误,没有toList()它的工作和subscribe()方法进入尽可能多的我有书的清单,我测试了它的代码的第二部分没有去抖动()只是getItems()并使用toList()它的工作原理.
下面是我的代码,第一部分是debounce()和itList(),它不起作用,第二部分是toList(),它起作用
我想转换为另一个数据,最后使用toList().
当我使用toList()没有任何事情发生没有任何日志不在订阅和错误,没有toList()它的工作和subscribe()方法进入尽可能多的我有书的清单,我测试了它的代码的第二部分没有去抖动()只是getItems()并使用toList()它的工作原理.
下面是我的代码,第一部分是debounce()和itList(),它不起作用,第二部分是toList(),它起作用
public Flowable<List<Book>> getItems(String query) {} textChangeSubscriber .debounce(300,TimeUnit.MILLISECONDS) .observeOn(Schedulers.computation()) .switchMap(s -> getItems(s).toObservable()) .flatMapIterable(items -> items) .map(Book::convert) .toList() .observeOn(AndroidSchedulers.mainThread()) .subscribe(books -> { Log.i("test","" + books.toString()); },error -> { Log.i("test","" + error); }); getItems(query).flatMapIterable(items -> items) .map(Book::convert) .toList() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(books -> { Log.i("test","" + "" + books.toString()); },"" + error); });
解决方法
toList需要终止序列,而不会在响应文本事件的外部流上发生.您应该将书籍的处理移动到switchMap中:
textChangeSubscriber .map(CharSequence::toString) // <-- text components emit mutable CharSequence .debounce(300,TimeUnit.MILLISECONDS) .observeOn(Schedulers.computation()) .switchMap(s -> getItems(s) .flatMapIterable(items -> items) .map(Book::convert) .toList() .toFlowable() // or toObservable(),depending on textChangeSubscriber ) .observeOn(AndroidSchedulers.mainThread()) .subscribe(books -> { Log.i("test","" + books.toString()); },error -> { Log.i("test","" + error); });