2017-05-26 43 views
0

使用主构造函数参数我在科特林实施AsyncTask一个子类:子类的AsyncTask的 - 未能在onPostExecute

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 
       } 
      } 
     } 
    } 

为什么这开销还是我失去了在这里什么任何想法?

回答

1

你可以试试吗?

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变量,它将被定义为一个类属性。

+1

在您的代码 –

+1

中没有val名为internalResponseHandler的固定值。谢谢! :) – tompee

+0

很酷..谢谢:) – Devarshi