2017-05-26 118 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

相關問題