Ich möchte 2 Observablen kombinieren und führen "kombinieren Funktion" auf AndroidSchedules.mainThread(). Ich habe .observeOn (AndroidSchedules.mainThread()) hinzugefügt, bekomme aber immer noch "java.lang.IllegalStateException: Not on the main thread".combineLatest() -Funktion auf mainThread
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());
Wohin weist der Fehler? Es ist möglich, dass die API es erfordert, dass Sie sie im Hauptthread aufrufen und nicht den Empfang des Endergebnisses. – akarnokd
Fehler zeigt auf googleMap.moveCamera (cameraUpdate). Ich weiß, dass diese Funktion auf dem Hauptthread ausgeführt werden soll, aber ich weiß nicht, wie Thread der Kombinationsfunktion festgelegt wird. –
Setzen Sie observeOn auf beide Quellen, wenn beide Werte haben, wird die Funktion auf dem Haupt-Thread ausgeführt. – akarnokd