我有一个执行网络呼叫的Kotlin异步任务。我想传递任务应在运行时执行的方法

问题描述 投票:0回答:1

[这是使用GRPC的kotlin android应用。我要避免的是拥有多个GrpcTask类或doInBackGround函数,每个网络调用一个。例如,登录,注销,获取一些数据等...在下面的示例中,函数sayhello是硬编码的:是否可以将不同的函数作为参数传递?并且具有不同的返回类型。我不确定如何在Kotlin中解决此问题,所以我真的还没有尝试过。

  override fun doInBackground(vararg params: Int?): String? {
                val host = params[0]
                val message = params[1]
                val portStr = params[2]
                val port = if (TextUtils.isEmpty("50002")) 0 else Integer.valueOf("50002")
                return try {
                    channel = ManagedChannelBuilder.forAddress("127.0.0.1", 50002).usePlaintext().build()
                    val stub = emeraldSRVGrpc.newBlockingStub(channel)
                /*I would like to make this section dynamic*/
                    val request = HelloRequest.newBuilder().setName(message).build()
                    val reply = stub.sayHello(request)
               /* */
                    reply.message
                } catch (e: Exception) {
                    val sw = StringWriter()
                    val pw = PrintWriter(sw)
                    e.printStackTrace(pw)
                    pw.flush()

                    "Failed... : %s".format(sw)
            }
android kotlin
1个回答
0
投票

当然,您可以执行以下操作:

fun <Input, Output> doInBackground(
    vararg params: Int?,
    inputHandler: (Array<Int?>) -> Input,
    outputHandler: (Input) -> Output): Output {
    val host = params[0]
    val message = params[1]
    val portStr = params[2]

    return outputHandler(inputHandler(arrayOf(host, message, portStr)))
}

其中InputOutput可以是您喜欢的任何类型。这里inputHandler,outputHandler是必需的函数。

© www.soinside.com 2019 - 2024. All rights reserved.