Android 修改协同程序用例的返回类型
我最初使用rxjava编写api调用,现在我将它们转换为使用挂起函数的kotlin协程 我遵循用例模式,其中我的用例负责线程 我希望我的基本用例Android 修改协同程序用例的返回类型,android,kotlin,retrofit,kotlin-coroutines,use-case,Android,Kotlin,Retrofit,Kotlin Coroutines,Use Case,我最初使用rxjava编写api调用,现在我将它们转换为使用挂起函数的kotlin协程 我遵循用例模式,其中我的用例负责线程 我希望我的基本用例usecasessuspend非常通用,以返回实际api调用的类型 如何修改我的usecasessuspend以返回任何类型,我想目前我已将其设置为返回Unit,这是我想要更改的 OrderRepository-返回GenericResponse suspend fun notifyOnStSuspend(serviceType: String, i
usecasessuspend
非常通用,以返回实际api调用的类型
如何修改我的usecasessuspend
以返回任何类型,我想目前我已将其设置为返回Unit
,这是我想要更改的
OrderRepository-返回GenericResponse
suspend fun notifyOnStSuspend(serviceType: String, id: String, action: TimestampedAction): GenericResponse =
serviceSuspend.serviceOrderOnSt(serviceType, id, action)
OnStuseCaseSuppend,扩展UseCaseSuppend
以下是run
-
返回类型为“GenericResponse”,它不是重写的公共抽象挂起乐趣运行(params:OnStUseCaseSuspend.params)的子类型:在com.i6systems.in2plane.clean.domain.UseCaseSsuspend中定义的单元
class OnStUseCaseSuspend @Inject constructor(
private val orderRepository: OrderRepository
) : UseCaseSuspend<GenericResponse, OnStUseCaseSuspend.Params> (){
override suspend fun run(params: Params) =
orderRepository.notifyOnStSuspend(params.serviceType, params.id, params.action)
data class Params(val serviceType: String, val id: String, val action: TimestampedAction)
}
类OnStUseCaseSuspend@Inject构造函数(
私有val orderRepository:orderRepository
):useCaseSupspend(){
覆盖暂停趣味跑步(参数:参数)=
orderRepository.notifyOnStSuspend(params.serviceType、params.id、params.action)
数据类参数(val serviceType:String,val id:String,val action:timestamedAction)
}
UseCaseSupspend-我认为应该更改它,以根据API调用返回任何响应,而不是特定于GenericResponse
abstract class
UseCaseSuspend <out Type, in Params> where Type : Any {
abstract suspend fun run(params: Params)
operator fun invoke(params: Params, onResult: (m: Unit) -> Unit = {}) {
val job = GlobalScope.async(Dispatchers.IO) { run(params) }
GlobalScope.launch(Dispatchers.Main) { onResult(job.await()) }
}
class None
}
抽象类
UseCaseSupspend,其中类型:Any{
摘要暂停趣味跑步(params:params)
运算符fun invoke(params:params,onResult:(m:Unit)->Unit={}){
val job=GlobalScope.async(Dispatchers.IO){run(params)}
GlobalScope.launch(Dispatchers.Main){onResult(job.await())}
}
一类
}
我希望保持usecasessuspend
非常通用,以便响应可以是任何内容
我怎么能做下面的链接,但我不使用任何一个
我指的是
谢谢
R
编辑:
我在usecasessuspend
中为run
函数添加了返回类型,它在job.await()中给了我一个错误
这是使用Onstusecase的演示者,响应类型为Unit
,但应为Generic response
suspend fun notifyOnStSuspend(serviceType: String, id: String, action: TimestampedAction): GenericResponse =
serviceSuspend.serviceOrderOnSt(serviceType, id, action)
用Okhttp3头替换任何?问题是您的类OnStUseCaseSuspend.Params
没有扩展Params
上的usecasessuspend
@jeelvankhee感谢您的响应,请详细说明一下。@BRDroid在我看来,您的代码似乎将挂起调用转换为回调。您可以通过该回调获得响应。我想你必须在演示者中调用onstandusecasessuspend(params){response->Timber.d(“…”+response)}
。@marstran这很有道理,你完全正确