当前位置: 首页 > 知识库问答 >
问题:

在循环中发出值(RxJava)

彭鹭洋
2023-03-14

我是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();
            }
        }
    });
}

谢谢

共有1个答案

司寇昱
2023-03-14

您真的应该在桥接Pendingreult上投入一些时间

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);
}

开始研究如何实现桥接的一个好地方是这个库,但它只是RxJava 1。

 类似资料:
  • 问题内容: 在下面的代码中,我希望循环在+ + =时立即退出。但是,使用语句进行测试表明它一直持续到循环完成为止。我尝试过,然后在语句集中进行设置,但这会导致无限循环。我认为使用然后设置可能有效,但也可以一直运行到循环结束为止。什么是最优雅,最快的退出方式?谢谢。 问题答案: 该循环将只匹配条件时,当控制返回到它,即循环完全执行。因此,这就是即使满足条件也不会立即退出程序的原因。 但是,如果条件没

  • 问题内容: 在Python中,尝试对具有循环的列表执行最基本的追加功能:不知道我在这里缺少什么: 返回: 问题答案: 该函数不返回任何值(而是),它只是将值添加到用于调用该方法的列表中。 在第一个循环中,您将分配(由于不返回)给,然后在第二个循环中,它将尝试调用,因为它将引发您看到的Exception 您只需要将其更改为: 这就是所谓的 变异或破坏性 方法,即它将破坏或变异先前的对象成为一个新的(

  • 我已经用Java编写了这个开关案例程序。但是,while循环没有中断。代码如下: 我不知道,为什么break函数在这个循环中不起作用…请帮帮我..

  • 问题内容: 我正在尝试使用for循环跳过值。就像是 有什么建议?谢谢! 问题答案: 在循环开始时使用它: 这比仅继续进行要好得多。您不想迭代128到159。你会浪费时间。

  • //在下面的程序中,在内部,当用户收到指令时,他可以简单地进入哨兵退出while循环,但是,当您得到希望购买的票的结果时,按999并不退出程序

  • 它没有提供关于如何执行和的帮助,这在C中定义得很好,并且广泛使用,而且我不必为STDIN读取数据。 有人能帮我用一个与上面的C代码相当的Bash吗?