【问题标题】:Why debounce() with toList() doen't working in RxAndroid?为什么 debounce() 和 toList() 在 RxAndroid 中不起作用?
【发布时间】:2017-04-28 16:18:42
【问题描述】:

当我使用 debounce() 时,然后从后端获取数据和数据 我想转换为另一个数据,最后使用toList()。 当我使用toList() 时,什么都没有发生,没有任何日志没有订阅和错误,没有toList() 它可以工作,subscribe() 方法输入的数量与我的书籍列表一样多,我测试了代码的第二部分,没有@ 987654326@ 只是 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);
            });

【问题讨论】:

    标签: android rx-java rx-android


    【解决方案1】:

    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);
            });
    

    【讨论】:

      猜你喜欢
      • 2020-11-10
      • 2019-10-20
      • 1970-01-01
      • 2013-04-02
      • 2018-05-28
      • 2021-09-23
      • 2019-04-02
      • 2015-08-30
      • 1970-01-01
      相关资源
      最近更新 更多