gpt4 book ai didi

android - 为什么带有 toList() 的 debounce() 在 RxAndroid 中不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:36:23 31 4
gpt4 key购买 nike

当我使用 debounce() 时,然后从后端获取数据和数据我想转换为另一个数据,最后使用 toList()。当我使用 toList() 时,什么都没有发生,没有任何日志不在订阅和错误中,没有 toList() 它可以工作并且 subscribe()方法输入的数量与我的书籍列表一样多,我测试了代码的第二部分,没有 debounce() 只是 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 -> {
Log.i("test", "" + 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 - 为什么带有 toList() 的 debounce() 在 RxAndroid 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43684734/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com