2017-05-26 2 views
0

Ich habe eine Unterklasse von AsyncTask in Kotlin implementiert:Subclass von AsyncTask in Kotlin - nicht in der Lage innerhalb OnPostExecute primäre Konstruktor Parameter verwenden

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

Problem ist - ich unten Störung erhalte auf dieser Linie responseHandler.agentCreationSucceeded():

Ungelöste Referenz: responseHandler

ich kann es ausdrücklich funktioniert erklärt eine Eigenschaft und ihr den im Konstruktor übergebenen Parameter zuzuteilen:

Irgendwelche Ideen, warum diese Overhead oder fehlt mir hier etwas?

Antwort

1

Können Sie das versuchen?

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

Der Grund ist variabler Bereich. responseHandler : SignUpTaskResponseHandler ist nur im Klassenkonstruktor definiert. Wenn Sie es als val-Variable angeben, wird es als Klasseneigenschaft definiert.

+1

In Ihrem Code –

+1

ist kein Wert namens internalResponseHandler vorhanden. Vielen Dank! :) – tompee

+0

cool .. danke :) – Devarshi

Verwandte Themen