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());
我想合并 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());