gpt4 book ai didi

android - 如何在 rxJava 中返回值

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:35:41 25 4
gpt4 key购买 nike

我是 rxJava 的新手,它让我头晕目眩。基本上,我通过改造从 youtube api 中提取数据,返回 Observable 并使用 youtubeDataMapper,我将其映射到包含 String videoID 的 Youtube Pojo 对象中。所以我的问题是,如何让这个方法返回那个字符串而不是 Completable?

这是我的方法:

@Override
public Completable downloadVideoUrl(String query) {

addSubscription(youtubeApi.getYoutubeId(query, Constants.youtubeApi)
.map(youtubeDataMapper::map)
.subscribeOn(subscribeScheduler)
.observeOn(observeScheduler)
.subscribe());
return Completable.complete();
}

最佳答案

你有两个选择:

  1. 让您的 downloadVideoUrl 返回 Observable 而不是 Completable:

    首选方式:

    @Override
    public Completable downloadVideoUrl(String query) {
    return youtubeApi.getYoutubeId(query, Constants.youtubeApi)
    .map(youtubeDataMapper::map)
    .subscribeOn(subscribeScheduler)
    .observeOn(observeScheduler);
    }

    注意这里缺少 subscribe 运算符。

    然后在任何你想获取videoId的地方:

    downloadVideoUrl(query)
    .subscribe(new Subscriber<String>() {
    @Override
    public void onCompleted() {

    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onNext(String videoId) {
    // do whatever you want with videoId
    }
    });
  2. 使用toBlocking().first()

    这不是首选,因为您阻塞当前 Thread 直到 Observable 完成

    @Override
    public String downloadVideoUrl(String query) {
    return youtubeApi.getYoutubeId(query, Constants.youtubeApi)
    .map(youtubeDataMapper::map)
    .subscribeOn(subscribeScheduler)
    .observeOn(observeScheduler)
    .toBlocking().first();
    }

关于android - 如何在 rxJava 中返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40172731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com