mainThread 上的 combineLatest() 函数

combineLatest() function on mainThread

我想合并 2 个可观察对象并在 AndroidSchedules.mainThread() 上执行 "combine function"。我已经添加了 .observeOn(AndroidSchedules.mainThread()) 但我仍然得到 "java.lang.IllegalStateException: Not on the main thread".

Observable<List<Post>> animateCameraAndGetPostsByProjection = Observable.combineLatest(
            mapObservableProvider.getMapReadyObservable(),
            LocationService.getUpdatedOrLastKnownLocation(this),
            (googleMap, location) -> {
                CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(),location.getLongitude()),15);
                googleMap.moveCamera(cameraUpdate);
                return googleMap.getProjection().getVisibleRegion();
            })
            .flatMap(vr -> new RestService().getApi().getPostsByMapProjection(vr.farLeft.latitude,vr.farLeft.longitude,vr.nearRight.latitude,vr.nearRight.longitude))
            .observeOn(AndroidSchedulers.mainThread());

在这种情况下,您必须将两个值配对并将其发送到主线程。

Observable<List<Post>> animateCameraAndGetPostsByProjection =  Observable.combineLatest(
    mapObservableProvider.getMapReadyObservable(),
    LocationService.getUpdatedOrLastKnownLocation(this),
    (googleMap, location) -> Pair.of(googleMap, location)
)
.observeOn(AndroidSchedulers.mainThread())
.map(pair -> {
     CameraUpdate cameraUpdate = CameraUpdateFactory
         .newLatLngZoom(new LatLng(pair.second.getLatitude(),
              pair.second.getLongitude()),15);
     pair.first.moveCamera(cameraUpdate);
     return googleMap.getProjection().getVisibleRegion();         
})
.flatMap(vr -> new RestService().getApi()
   .getPostsByMapProjection(vr.farLeft.latitude,vr.farLeft.longitude,
        vr.nearRight.latitude,vr.nearRight.longitude)
)
.observeOn(AndroidSchedulers.mainThread());