Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 修改协同程序用例的返回类型_Android_Kotlin_Retrofit_Kotlin Coroutines_Use Case - Fatal编程技术网

Android 修改协同程序用例的返回类型

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

我最初使用rxjava编写api调用,现在我将它们转换为使用挂起函数的kotlin协程

我遵循用例模式,其中我的用例负责线程

我希望我的基本用例
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这很有道理,你完全正确