gpt4 book ai didi

android - 改造 - android.os.NetworkOnMainThreadException 与 RxKotlin

转载 作者:行者123 更新时间:2023-11-29 22:42:55 26 4
gpt4 key购买 nike

我已经创建了 rx 函数来从 android 中的 view-model 调用网络调用,它在主线程函数上解析网络。

我只是更改了几行它起作用的代码。但我需要知道这样做的原因,因为它使用相同的构建器模式来创建 rx-call。一旦我尝试更改 .doOnSubscribe() , doOnComplete () , .applySchedulers() 在平面图调用之后它起作用了吗?这是怎么发生的?

fun loadjobs(var countryID:String){
subscription.add(
repository.getMainJobsFromLocal(countryID)
.doOnSubscribe { postProgress(StatusModel(Status.IN_PROGRESS))}
.doOnComplete { postProgress(StatusModel(Status.COMPLETED)) }
.applySchedulers()
.flatMap {
if (it.isNullOrEmpty()) {
repository.getMainJobsFromServer(countryID)
} else {
Flowable.just(Response.success(it))
}
}
.subscribe({
if (it.isResponseOk()) {
postProgress(StatusModel(Status.SUCCESS))
mainJobResponse.postValue(it.body())
} else {
postProgress(StatusModel(Status.FAILED))
mainJobResponse.postValue(null)
}
}, {
postProgress(StatusModel(Status.FAILED))
mainJobResponse.postValue(null)
}))
}


fun loadjobs(var countryID){
subscription.add(
repository.getMainJobsFromLocal(countryID)
.flatMap {
if (it.isNullOrEmpty()) {
repository.getMainJobsFromServer(countryID).flatMap {
Flowable.just(it)
}
} else {
Flowable.just(Response.success(it))
}
}.doOnSubscribe { postProgress(StatusModel(Status.IN_PROGRESS)) }
.doOnComplete { postProgress(StatusModel(Status.COMPLETED)) }
.applySchedulers()
.subscribe({
if (it.isResponseOk()) {
postProgress(StatusModel(Status.SUCCESS))
mainJobResponse.postValue(it.body())
} else {
postProgress(StatusModel(Status.FAILED))
mainJobResponse.postValue(null)
}
}, {
postProgress(StatusModel(Status.FAILED))
mainJobResponse.postValue(null)
}))
}

最佳答案

applySchedulers() after the flatmap call it worked? how is this happened?

observeOn() 影响下游的一切。如果在 observeOn() 之后有一个 flatMap(),它将在该调度程序上执行。

同样 subscribeOn() 影响上游链。

出于这些原因,对于大多数用例,您希望在 rx 链的末尾而不是中间应用调度程序。

关于android - 改造 - android.os.NetworkOnMainThreadException 与 RxKotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58795905/

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