【发布时间】:2019-12-20 21:54:11
【问题描述】:
我想从与 RxJava 集成的 Retrofit 获取 Livedata 响应,用于调用 API。 我知道 RxJava 响应是流式的,无法直接放入 Livedata。所以感谢您的帮助。
这是一个使用 RxJava 集成改造的示例代码。 如何用 Livedata 替换 Observable。
class GitHubRxService {
private GitHubRxApi gitHubApi;
GitHubRxService() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
gitHubApi = retrofit.create(GitHubRxApi.class);
}
Observable<String> getTopContributors(String userName) {
return gitHubApi.listRepos(userName)
.flatMapIterable(x -> x)
.flatMap(repo -> gitHubApi.listRepoContributors(userName, repo.getName()))
.flatMapIterable(x -> x)
.filter(c -> c.getContributions() > 100)
.sorted((a, b) -> b.getContributions() - a.getContributions())
.map(Contributor::getName)
.distinct();
}
}
【问题讨论】:
-
如果您将 Observable 替换为 Single,那么您应该能够将响应发布到 LiveData。
标签: android retrofit rx-java android-livedata