web-dev-qa-db-fra.com

Poste de gestionnaire ne fonctionne pas à Kotlin, ce qui ne va pas

Est-ce que quelqu'un pourrait me montrer ce qui ne va pas, j'essaie d'utiliser un Handler poster un Runnable mais ce n'est pas exécuté 

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

Ceci est la sortie

09-21 00: 56: 04.067 4419-4419 /? D/TEST: ++++ runnablecom.vpioneer.activity.MainActivity$onCreate$runnable$1@529b8fb4 09-21 00: 56: 04.067 4419-4419 /? D/TEST: ++++ handleHandler (Android.os.Handler) {529b8cb4}

5
songoku1610

Tout d’abord, n’utilisez pas l’opérateur !!, c’est une très mauvaise pratique (du doc ). Avec ? vous obtiendrez le même comportement mais en vérifiant si l'instance est devenue nulle avant de l'exécuter. 

En disant cela, en utilisant:

mHandler?.post { runnable }

Vous créez actuellement un nouveau lambda contenant une ligne exécutable. voir ci-dessous d'une manière plus lisible:

mHandler?.post { 
   runnable 
}

C'est l'équivalent en Java:

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

Pour résoudre ceci:

Option 1: se débarrasser de la déclaration exécutable

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

Option 2: en utilisant votre instance exécutable

mHandler?.post(runnable) // normal parentheses

Option 3: façon folle

mHandler?.post { runnable.run() }
14
crgarridos

Vous ne commencez pas runnbale. Essaye ça:

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

Ceci est également valable:

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

Essayez ce code, j'espère que cela fonctionne

   Handler().postDelayed({
            // You code and delay time
   }, 1000L)
1
Najib Puthawala