Kotlin 中 AsyncTask 的子类 - 无法在 onPostExecute 中使用主构造函数参数
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()
:
Unresolved reference: 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
仅在 class 构造函数中定义。如果将其指定为 val 变量,它将定义为 class 属性.
我在 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()
:
Unresolved reference: 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
仅在 class 构造函数中定义。如果将其指定为 val 变量,它将定义为 class 属性.