微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么使用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);
        });

原文地址:https://www.jb51.cc/android/310187.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐