RXJava Наблюдаемые элементы emit при подписке с Observer ТОЛЬКО анонимным типом - PullRequest
0 голосов
/ 18 октября 2019

Когда я создаю новый Observer как анонимный тип, он работает отлично:

Observable<List<Post>> postsListObservable = mApplicationAPI.getPosts();

        postsListObservable.
                subscribeOn(Schedulers.io()).
                observeOn(AndroidSchedulers.mainThread()).subscribe( new Observer<List<Post>>() {

            @Override
            public void onSubscribe(Disposable d) {
                Log.i("ZOKa", "onSubscribe: ");
            }

            @Override
            public void onNext(List<Post> posts) {

                Log.i("ZOKa", "onNext: " + posts.size());
            }

            @Override
            public void onError(Throwable e) {
                Log.i("ZOKa", "onError: " + e.getMessage());
            }

            @Override
            public void onComplete() {
                Log.i("ZOKa", "onComplete: ");

            }
        });

Когда я создаю Observer как динамический тип, он не генерирует данные

Observable<List<Post>> postsListObservable = mApplicationAPI.getPosts();

    postsListObservable.
            subscribeOn(Schedulers.io()).
            observeOn(AndroidSchedulers.mainThread());

    Observer<List<Post>>  observer = new Observer<List<Post>>() {

        @Override
        public void onSubscribe(Disposable d) {
            Log.i("ZOKa", "onSubscribe: ");
        }

        @Override
        public void onNext(List<Post> posts) {

            Log.i("ZOKa", "onNext: " + posts.size());
        }

        @Override
        public void onError(Throwable e) {
            Log.i("ZOKa", "onError: " + e.getMessage());
        }

        @Override
        public void onComplete() {
            Log.i("ZOKa", "onComplete: ");

        }
    };
    postsListObservable.subscribe(observer);

Logcatдля первого фрагмента кода:

com.tripleService.basesetupfordi / I / ZOKa: onSubscribe: com.tripleService.basesetupfordi / I / ZOKa: onNext: 100: com.tripleService.basesetupfordi / I /: onComplete:

Logcat для второго:

com.tripleService.basesetupfordi / I / ZOKa: onError: null

ИтакЧто такое разница между?

1 Ответ

1 голос
/ 19 октября 2019

Это потому, что операторы возвращают новые наблюдаемые, но они не изменяют наблюдаемые, к которым они были вызваны. subscribeOn и observeOn во втором примере не влияют на postsListObservable и observer.

Должны работать следующие команды:

Observable<List<Post>> postsListObservable = mApplicationAPI.getPosts();


    Observable<List<Post>> postsListObservable2 = postsListObservable.
            subscribeOn(Schedulers.io()).
            observeOn(AndroidSchedulers.mainThread());

    Observer<List<Post>>  observer = new Observer<List<Post>>() {
        ...
    };

    postsListObservable2.subscribe(observer);

или

Observable<List<Post>> postsListObservable = mApplicationAPI.getPosts();

    Observer<List<Post>>  observer = new Observer<List<Post>>() {
        ...
    };

    postsListObservable.
            subscribeOn(Schedulers.io()).
            observeOn(AndroidSchedulers.mainThread()).subscribe(observer);
...