错误:“无法将智能转换为字符串,因为“消息”是可变的属性”

时间:2018-07-20 12:01:11

标签: android kotlin

我知道已经问过这种类型的问题,但是它对我不起作用,所以请告诉我如何使以下代码正常工作:

 if (a1!= null && a2!= null && message != null) {
     if (intent!= null) {
         Thread.sleep(5000)
         ChangePicAsyncTask(context, message).execute(a1, a2)           //Error line 
     }
 }

此处“消息”是声明为私有var类级别的可为空的变量。在“ Thread.sleeep(..)”行下方,显示了该错误。我尝试进行if检查,但它也无法正常工作,因此请提供一些建议以解决该错误。

2 个答案:

答案 0 :(得分:3)

变量messageThread.sleep()之后可能已更改(例如变为null)。所以也许使用let。

message?.let { Thread.sleep(5000) ChangePicAsyncTask(context, it).execute(a1, a2) }

答案 1 :(得分:0)

为确保其不变,您必须将其分配给最终变量,如下所示:

 val a1 = a1
 val a2 = a2
 val message = message
 if (a1 != null && a2 != null && message != null) {
     if (intent!= null) {
         Thread.sleep(5000)
         ChangePicAsyncTask(context, message).execute(a1, a2) // Smart casts now work
     }
 }

如果这看起来很俗气,那么您可以使用方法described here