【发布时间】:2023-03-28 23:13:01
【问题描述】:
我需要从服务器获取相机ID,然后通过ID获取此相机的事件,最后通过ID获取图像。 然后,所有这些都需要组合成一个 UI 帖子 {Camera name - image url - it events} 例如,我们可能有 5 个摄像头名称、30 个事件 ID(一个摄像头名称对应 6 个)和 30 个 url。 我尝试使用 zip 来组合 Observable api 调用(分别)获取相机名称、事件 ID 和图像 url。但据我了解,由于 zip 无法正确匹配 5 个名称和 30 个 ID,因此它无法正常工作 告诉我什么可以用来做这个?
GetApiMethods getApiMethods = NetworkService.getInstance().createService(GetApiMethods.class);
Observable<Camera> cameras = getCamera();
Observable<Event> events = getEvents();
Observable<Post> combined = Observable.zip(cameras, events, (camera, event) -> new Post(camera.getDisplayName(),"null",event.getType()));
public LiveData<String> CameraRequests() {
combined.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.concatMap(Observable::fromArray)
.subscribe(new Observer<Post>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull Post post) {
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
return liveData;
}
public Observable<Event> getEvents() {
return Observable.create(allEvents -> getApiMethods.getCameras()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.concatMap(Observable::fromIterable)
.concatMap(Observable::fromIterable)
.concatMap(camera -> getApiMethods.getEvents(camera.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) {
}
@Override
public void onError(@NonNull Throwable e) {
Log.d("RXJAVA1", String.valueOf(e));
}
@Override
public void onComplete() {
}
})
);
}
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) {
}
@Override
public void onError(@NonNull Throwable e) {
Log.d("RXJAVA", String.valueOf(e));
}
@Override
public void onComplete() {
}
})
);
}
【问题讨论】:
-
@MikkelT 谢谢!但是我对 Livedata 没有任何问题,只有 RXJava
-
omg 对不起,我一定是回错帖了
-
你能添加你到目前为止尝试过的代码吗?
-
@DatPhamTat 你好!我已附上代码
标签: android retrofit rx-java rx-android