Handler的post在Kotlin里是不行的,怎么了?

有人可以告诉我什么是错的,我尝试使用一个Handler发布一个Runnable但它不是执行

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

这是输出

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}

2 Solutions collect form web for “Handler的post在Kotlin里是不行的,怎么了?”

首先,不要使用!! 操作员,这是一个非常糟糕的做法(从文档 )。 用? 你将达到相同的行为,但在执行之前检查实例是否为空。

说这个,使用:

 mHandler?.post { runnable } 

实际上你正在创建一个新的包含可运行行的lambdaexpression式。 在下面以更可读的方式看到这里:

 mHandler?.post { runnable } 

这在Java中是相当的:

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

要解决这个问题:

方案1:摆脱可运行的声明

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

选项2:使用您的可运行实例

 mHandler?.post(runnable) // normal parentheses 

选项3:疯狂的方式

 mHandler?.post { runnable.run() } 

你没有启动runnbale 。 尝试这个:

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

这也是有效的:

 mHandler!!.post { Log.d("TEST", "++++ runable") Log.d("TEST", "++++ come end") } 
  • 如何在Kotlin中“锁定”静态对象
  • 订阅多个视图到一个视图onclick和可见性改变RxAndroid
  • 如何使用界面android在适配器中创建onclick事件?
  • 为什么平台types不匹配nonnull对象
  • Kotlin:val,或者可以设置一次的var
  • 科特林向我解释了“背景场”
  • 我如何更新Android工作室2.3.2在Ubuntu的3.0?
  • 返回值没有设置
  • 无法使Android房间实体类可见
  • 在kotlin android项目中使用intellij-markdown
  • 如何从kotlin的道路上获得歌曲的ALBUM ART?
  • Kotlin language will be the best programming language for Android.