【问题标题】:RXJava Observable emit items when subscribe with Observer as anonymous type ONLYRXJava Observable 仅在以匿名类型订阅 Observer 时发出项目
【发布时间】:2019-10-18 18:40:57
【问题描述】:

当我创建一个新的观察者作为匿名类型时它工作正常:

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: ");

            }
        });

当我将观察者创建为动态类型时,它不会发出数据

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为第一个代码sn -p:

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

第二个的Logcat:

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

那么,两者之间的区别是什么?

【问题讨论】:

    标签: rx-java2 rx-android


    【解决方案1】:

    这是因为 Operator 返回新的 observable,但他们不会修改调用它们的 observable。第二个示例中的subscribeOnobserveOnpostsListObservableobserver 没有影响。

    以下应该可以工作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多