直接上代码,看注释:
首先是rxjava版本,两种方式根据实际场景自行选择
//rxjava+retrofit网络请求
Observable<User> userObservable = apiService.getUser("username");
Observable<List<Repo>> repoObservable = apiService.listRepos("username");
//方式一:
Observable.zip(userObservable, repoObservable, new BiFunction<User, List<Repo>, Object>() {
@Override
public Object apply(User user, List<Repo> repos) throws Exception {
// 在这里对两个 Observable 的结果进行合并和处理
return null;
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Object>() {
@Override
public void onSubscribe(Disposable d) {
// 连接建立时调用
}
@Override
public void onNext(Object o) {
// 在 zip 操作符的回调中对结果进行统一处理
}
@Override
public void onError(Throwable e) {
// 请求失败时调用
}
@Override
public void onComplete() {
// 请求完成时调用
}
});
//方式一:
Observable.zip(Observable.fromIterable(requestObservables), new Function<Object[], Object>() {
@Override
public Object apply(Object[] objects) throws Exception {
// 对多个请求的结果进行处理
return null;
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Object>() {
...
@Override
public void onNext(Object o) {
// 对多个请求的结果进行统一处理
}
...
});
kotlin协程版本
GlobalScope.launch(Dispatchers.Main) {
try {
val userDeferred = async { apiService.getUser("username") }
val reposDeferred = async { apiService.listRepos("username") }
val result = awaitAll(userDeferred, reposDeferred)
val user = result[0] as User
val repos = result[1] as List<Repo>
// 在这里对两个异步任务的结果进行合并和处理
} catch (e: Exception) {
// 处理异常
}
}