繁体   English   中英

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()遇到错误:

未解决的参考: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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM