2017-09-21 2 views
1

jemand zeigen könnte mir was falsch ist, ich versuche, einen Handler Post ein Runnable zu verwenden, aber es ist nicht ausführenHandler die Post nicht in Kotlin arbeiten, was falsch ist

var mHandler: Handler? = null 

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 
    mHandler = Handler() 
    var runnable = Runnable { 
     Log.d("TEST", "++++ runable") 
     Log.d("TEST", "++++ come end") 
    } 
    Log.d("TEST", "++++ runnable" + runnable) 
    Log.d("TEST", "++++ handle" + mHandler) 
    mHandler!!.post { runnable } 
} 

Dies ist Ausgabe

09-21 00:56:04.067 4419-4419/? D/TEST: ++++ [email protected]29b8fb4 09-21 00:56:04.067 4419-4419/? D/TEST: ++++ handleHandler (android.os.Handler) {529b8cb4}

+0

ich empfehlen würde Ihre erste Linie 'lateinit var mhandler zum Ändern: Handler', da Sie es schaffen' onCreate' . Dann müssen Sie sich nicht um die NULL-Zulässigkeit kümmern. –

Antwort

7

Zuerst überhaupt nicht !! Operator verwenden, ist es eine sehr schlechte Praxis (vom doc). Mit ? werden Sie das gleiche Verhalten erreichen, aber prüfen, ob die Instanz null wurde, bevor Sie sie ausführen.

diesen Worten mit:

mHandler?.post { runnable } 

Sie sind eine neue Lambda enthält runnable Linie tatsächlich zu schaffen. siehe hier unten in eine besser lesbare Art und Weise:

mHandler?.post { 
    runnable 
} 

Dies ist das Äquivalent in Java:

mHandler.post(new Runnable(){ 
    public void run(){ 
     runnable; 
    } 
}); 

Um dies zu lösen:

Option 1: das Loswerden der runnable Erklärung

mHandler?.post { /*the content of your runnable*/ } 

Option 2: Ihre runnable Instanz mit

mHandler?.post(runnable) // normal parentheses 

Option 3: verrückt Weg

mHandler?.post { runnable.run() } 
+0

Vielen Dank, mein großer Fehler – songoku1610

1

Sie starten nicht runnbale. Versuchen Sie folgendes:

mHandler!!.post { runnable.run() } 

Dies gilt auch:

mHandler!!.post { 
    Log.d("TEST", "++++ runable") 
    Log.d("TEST", "++++ come end") 
} 
+0

Ich bekomme einen Fehler: ** java.lang.RuntimeException: Kann nicht Handler innerhalb Thread, der nicht Looper.prepare() aufgerufen hat ** –