[这是使用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)
}
当然,您可以执行以下操作:
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)))
}
其中Input
,Output
可以是您喜欢的任何类型。这里inputHandler,outputHandler是必需的函数。