Kotlin中AsyncTask的子类 – 无法在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变量,则将其定义为类属性。
- 如何用十六进制值更改CheckedTextView的Checked Tint Color
- 保存和恢复嵌套片段中的状态
- kotlin android – 用Builder模式和Java 8 lambda定制对话框
- 我怎样才能重写一个java方法,并改变参数的可空性?
- Android Espresso无法输入TYPE_TEXT_VARIATION_NORMAL?
- 如何将RealmResults <Object>转换为List <Object>
- 错误:执行任务失败:app:transformClassesWithMultidexlistForDebug当我使用AdCash monatisation(Android)
- 在Kotlin的意图
- Kotlin泛型继承 – 类型不匹配