[英]Subclass of AsyncTask in Kotlin - unable to use primary constructor parameter within onPostExecute
我在Kotlin中实现了AsyncTask
的子类:
class SignUpTask(responseHandler: SignUpTaskResponseHandler): AsyncTask<Agent, Void, Boolean>() {
override fun doInBackground(vararg params: Agent?): Boolean {
// Some awesome code
return true
}
override fun onPostExecute(result: Boolean?) {
result?.let {
if (it) {
responseHandler.agentCreationSucceeded()
} else {
// agent creation failed
}
}
}
}
问题是-我在此行responseHandler.agentCreationSucceeded()
遇到错误:
未解决的参考:responseHandler
我可以通过显式声明一个属性并为其分配在构造函数中传递的参数来使其工作:
class SignUpTask(responseHandler: SignUpTaskResponseHandler): AsyncTask<Agent, Void, Boolean>() {
val internalResponseHandler = responseHandler // explicit assignment to make it work inside onPostExecute
override fun doInBackground(vararg params: Agent?): Boolean {
// Some awesome code
return true
}
override fun onPostExecute(result: Boolean?) {
result?.let {
if (it) {
// Works only after explicit assignment?
internalResponseHandler.agentCreationSucceeded()
} else {
// agent creation failed
}
}
}
}
关于为什么会产生这种开销的任何想法还是我在这里错过了任何东西?
你可以试试这个吗?
class SignUpTask(val responseHandler: SignUpTaskResponseHandler): AsyncTask<Agent, Void, Boolean>() {
override fun doInBackground(vararg params: Agent?): Boolean {
// Some awesome code
return true
}
override fun onPostExecute(result: Boolean?) {
result?.let {
if (it) {
// Works only after explicit assignment?
responseHandler.agentCreationSucceeded()
} else {
// agent creation failed
}
}
}
}
原因是范围可变。 responseHandler : SignUpTaskResponseHandler
仅在类构造函数中定义。 如果将其指定为val变量,它将被定义为类属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.