Rxjava的基本使用
这是一个用Rxjava 编程请求网络数据的例子:
fun fetchUserData(userId: String) {
apiService.getUser(userId) // 返回 Observable
.flatMap { user ->
apiService.getOrders(user.id) // 获取订单
}
.retry(3) // 重试3次
.timeout(5, TimeUnit.SECONDS) // 超时设置
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ orders -> updateUI(orders) },
{ error -> showError(error) }
)
}
这是协程中用flow来示例网络请求的案例:
fun fetchUserData(userId: String) {
viewModelScope.launch {
flow {
val user = apiService.getUser(userId) // 挂起函数
emit(user)
}
.flatMapConcat { user ->
flow {
val orders = apiService.getOrders(user.id)
emit(orders)
}
}
.retry(3) // 重试
.timeout(5000) // 超时(毫秒)
.catch { e ->
// 异常处理
emit(emptyList())
}
.collect { orders ->
updateUI(orders)
}
}
}

Rxjava 是第三库,异步模型是基于观察者,
而flow是基于协程挂起函数。
Rxjava 需要手动管理生命周期,flow是并发自动管理。
浙公网安备 33010602011771号