android - 为什么在此代码中不调用 OnComplete? (RxAndroid)

标签 android rx-java rx-android

我知道当所有项目都发出时,会调用 Observer 的 OnComplete。在下面的代码中,我将游标中的数据放入 flatMap 运算符中的 ArrayList。 我的光标有 100 个条目( c.getCount() 给出 100 ),我的列表的大小是 100。 onNext 也被调用了 100 次。但是不会调用 onComplete。我在 onComplete 中填充一个 ListView 。

static int i = 0;
final List<String> ar = new ArrayList<>();
ListView lv = ...;
ArrayAdapter<String> adapter = ...;   
.
.
. 
q.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                    .flatMap(new Func1<SqlBrite.Query, Observable<String>>() {
                @Override
                public Observable<String> call(SqlBrite.Query query) {
                    Cursor c = query.run();
                    c.moveToFirst();
                    Log.d("testApp", String.valueOf(c.getCount())); // prints 100
                    do {
                        ar.add(c.getString(0));
                    } while (c.moveToNext());
                    Log.d("testApp", String.valueOf(ar.size())); // prints 100
                    return Observable.from(ar);
                }
            }).subscribe(new Observer<String>() {
                @Override
                public void onCompleted() {
                    Log.d("testApp", "onComplete called");
                    lv.setAdapter(adapter);
                }

            @Override
            public void onError(Throwable e) {
            }

            @Override
            public void onNext(String s) {
                Log.d("testApp", "onNext called " + String .valueOf(++i) + " with " + s); // printed 100 times
                adapter.add(s);
            }
        });

Observable 的新流将在 100 后完成,但它没有。

感谢任何帮助, 谢谢你

最佳答案

FlatMap 运算符将您的主流与您的 flatMapped 流合并。如果 q 和您的数组中的 Observable 完成,您的 observable 将完成。 所以检查为什么 q 不完整。

关于android - 为什么在此代码中不调用 OnComplete? (RxAndroid),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31316694/

相关文章:

android - ASmack - 从哪里获得 ChatManager?

android - 如何在使用 Robolectric 时计算测试覆盖率

android - 将 map_view 添加到我的 flutter 应用程序不成功

android - rxjava 和 android.database.contentobserver

android - "Error in retrofit api call"完成 observable 而不是让其他 observable 发出项目

android - Android 中的 RXJava 没有 RXAndoid lib?

android - 如何为 Android 实现聊天应用程序?

android - RuntimeException处理最佳实践

java - RxJava- cache() 和 replay() 一样吗?

android - 具有刷新布局的 rx-android(或 rxjava)