问题描述
我在我的项目中使用了 RxJava,现在我正在将逻辑从 observable 更改为协程。但我被困在 UI 点击是基于 rx 而 api 是基于挂起的,它不喜欢它。
有关如何解决此问题的任何建议
Fragment.java - 这是我的 UI 按钮
@Override
public Observable<Void> getStartSeeingObservable() {
return RxView.clicks(dataViewHolder.btnStartSeeing);
}
Presenter.kt
subscriptions += view.startSeeingObservable
.onBackpressureLatest()
.doOnNext { view.showLoader(false) }
.flatMap {
if (!hasOpenInopIncidents()) {
startSeeingUseCase(StartSeeingUseCase.Params(equipmentProvider.get()!!)) // this use case is not based on coroutines and its response is not an observable
} else {
val incidentOpenResponse = GenericResponse(false)
incidentOpenResponse.error = OPEN_INCIDENTS
Observable.just(incidentOpenResponse)
}
}
.subscribe(
{ handleStartSeeingClicked(view,it) },{ onStartSeeingError(view) }
)
用例
@PerApp
class StartSeeingUseCase @Inject constructor(
private val currentOrderStorage: CurrentOrderStorage,private val seeOrderRepository: SeeOrderRepository,private val app: App
): UseCaseCoroutine<GenericResponse,StartSeeingUseCase.Params>() {
override suspend fun run(params: Params): GenericResponse {
val startTime = DateTime()
val action = TimestampedAction(
app.session.user.id,null,startTime
)
try {
return seeOrderRepository.startSeeing(
currentOrderStorage.seeOrder!!.id,action
)
} catch (exception: Exception) {
exception.message?.let { onError(it) }
return GenericResponse(false)
}
}
private fun onSuccess(startTime: DateTime,equipment: Equipment) {
if (currentOrderStorage.getSeeOrder() == null) return
currentOrderStorage.getSeeOrder()!!.setStatus(SeeOrderData.STATUS_SeeING)
equipment.times.start = startTime
app.saveState()
}
private fun onError(errorMessage: String) {
Timber.e(errorMessage,"Error calling started seeing! %s",errorMessage)
}
data class Params(val equipment: Equipment)
}
abstract class UseCaseCoroutine<out Type,in Params> where Type : Any {
abstract suspend fun run(params: Params): Type
operator fun invoke(params: Params,onResult: (type: Type) -> Unit = {}) {
val job = GlobalScope.async(Dispatchers.IO) { run(params) }
GlobalScope.launch(Dispatchers.Main) { onResult(job.await()) }
}
}
错误是get是
你能建议如何解决这个问题吗
谢谢 R
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)