RXJava Retrofit 方法 onNext 未调用

时间:2021-08-01 15:18:44

标签: java android retrofit rx-java rx-android

我有两个 Observable 第一个获取摄像机的名称

    Observable<Camera> cameras = getCamera();
public Observable<Camera> getCamera() {

        return Observable.create(cameras1 -> getApiMethods.getCameras()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .concatMap(Observable::fromIterable)
                .map(Camera::getDisplayName)
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {

                    }

                    @Override
                    public void onNext(@NonNull String s) {

                        Log.d("RXJAVA", s);
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                        Log.d("RXJAVA", String.valueOf(e));
                    }

                    @Override
                    public void onComplete() {

                    }
                })

        );
    }

第二个获取相机的事件ID

    Observable<Event> events = getEvents();
 public Observable<Event> getEvents() {

        return Observable.create(allEvents -> getApiMethods.getCameras()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .concatMap(Observable::fromIterable)
                .concatMap(Observable::fromIterable)
                .concatMap(events -> getApiMethods.getEvents(events.getAccessPoint().replace("hosts", "")))
                .concatMap(Observable::fromIterable)
                .map(Event::getId)
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {

                    }

                    @Override
                    public void onNext(@NonNull String event) {
                        Log.d("RXJAVA", event);
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                        Log.d("RXJAVA", String.valueOf(e));
                    }

                    @Override
                    public void onComplete() {

                    }
                })
        );
    }

我想将它们组合起来以获取有关相机的所有信息,并在此基础上准备一个帖子以进行展示。一台摄像机(用于一个标题)可以有多个 ID。我使用了 Observable.zip

    Observable<Post> combined = Observable.zip(cameras, events, (camera, event) -> new Post(camera.getDisplayName(),"null",event.getType()));

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

                @Override
                public void onSubscribe(@NonNull Disposable d) {

                }

                @Override
                public void onNext(@NonNull Post post) {
                    Log.d("RQJ", "RQJ");
                }

                @Override
                public void onError(@NonNull Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });

但是,不会调用 OnNext 方法。 可观察的相机和事件工作正常,我从他们那里得到信息。 感谢您的帮助!

0 个答案:

没有答案