我是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();
}
Run Code Online (Sandbox Code Playgroud)
你有两个选择:
让你的downloadVideoUrl回报Observable而不是Completable:
首选方式:
@Override
public Completable downloadVideoUrl(String query) {
return youtubeApi.getYoutubeId(query, Constants.youtubeApi)
.map(youtubeDataMapper::map)
.subscribeOn(subscribeScheduler)
.observeOn(observeScheduler);
}
Run Code Online (Sandbox Code Playgroud)
注意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
}
});
Run Code Online (Sandbox Code Playgroud)使用 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();
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
8167 次 |
| 最近记录: |