为什么使用toList()的debounce()在RxAndroid中不起作用?

前端之家收集整理的这篇文章主要介绍了为什么使用toList()的debounce()在RxAndroid中不起作用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我使用debounce()时,然后从后端和数据中获取数据
我想转换为另一个数据,最后使用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);
        });

猜你在找的Android相关文章