我是Rx的新手,我一直想知道如何正确地逐个发出值(本例中的延迟加载图像)。 如果没有遇到并发问题,最好的方法是什么?
这是我的代码:
@Override
public Observable<Bitmap> getPhotos(final String placeId) {
return Observable.create(new ObservableOnSubscribe<Bitmap>() {
@Override
public void subscribe(ObservableEmitter<Bitmap> emitter) throws Exception {
try {
PlacePhotoMetadataResult res = Places.GeoDataApi
.getPlacePhotos(googleApiClient, placeId)
.await();
PlacePhotoMetadataBuffer buffer = res.getPhotoMetadata();
for (PlacePhotoMetadata photoMetadata : buffer) {
Bitmap photo = photoMetadata
.getPhoto(googleApiClient)
.await()
.getBitmap();
emitter.onNext(photo);
}
buffer.release();
} catch (Exception ex) {
emitter.onError(ex);
} finally {
emitter.onComplete();
}
}
});
}
谢谢!
答案 0 :(得分:1)
你真的应该投入一些时间来PendingResult<T>
到Observable<T>
(或Single
或Flowable
(我的偏好))。然后您的所有代码都可以表示为:
private static <T> Observable<T> toObservable(PendingResult<T> result) {
//
}
public Observable<Bitmap> getPhotos(final String placeId) {
return Observable
.just(placeId)
.flatMap(id -> toObservable(Places.GeoDataApi.getPlacePhotos(googleApiClient, placeId)))
.flatMapIterable(PlacePhotoMetadataResult::getPhotoMetadata)
.flatMap(metadata -> toObservable(metadata.getPhoto(googleApiClient)))
.map(Photo::getBitmap);
}
开始研究如何建立桥梁的好地方是this library,但它只是RxJava 1。