-->

为什么不的onComplete这段代码叫什么? (RxAndroid)(Why is OnCom

2019-10-23 17:43发布

我知道,当所有的项目都发出一个观察员的onComplete被调用。 在下面的代码中,我从一个光标把数据到一个ArrayList中flatMap运营商。 我的游标有100项(c.getCount()给出100)和我的列表的大小为100。onNext被称为100次了。 但的onComplete不叫。 我在填充一个的onComplete列表视图。

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

可观察到的新的数据流是100后完成,但事实并非如此。

任何帮助表示赞赏,感谢你

Answer 1:

FlatMap运营商,您flatMapped流合并的主流。 你观察到将完成,如果q和从你的阵列的完整的观测。 因此,检查为什么Q等同于没有没有完整的。



文章来源: Why is OnComplete not called in this code? (RxAndroid)