bitmap1 = Bitmap.createScaledBitmap(
bitmap1, // <---- error is here
(width.toInt()),
(height.toInt()),
false)
numberOfInvaders ++
我还在另一个类中使用了bitmap2和Bitmap1:
if (uhOrOh) {
canvas.drawBitmap(Invader.bitmap1, // <--- error is here
invader.position.left,
invader.position.top,
paint)
} else {
canvas.drawBitmap(Invader.bitmap2, // <---- and here
invader.position.left,
invader.position.top,
paint)
}
这里写着:类型不匹配,必需:位图找到:位图?
是的,这是正确的:)您不能这样使用值,因为它在某些时候可能是空的。
CreateScaledBitmap
需要不可为null的bitmap
,但不能保证您使用的位图在调用给定函数时不会为null。
那么,你能做什么?在呼叫检查位图是否为空之前:
if (bitmap != null) { /* code here, still requires !! operator */ }
在多线程环境中,存在这样的风险:在代码块的执行过程中,值仍然会发生更改,因此您可以使用let
函数和?.
运算符(与.
运算符基本相同,但仅在value不为null时执行)。块代码将使用一个实际上是最后的参数来调用,该参数是用于调用此方法的实例,在本例中为“位图”,称为“上下文对象”,可通过it
关键字访问:
bitmap?.let { /* code here, bitmap is passed as effectively final, so for sure it's not null */ }
另一种方法是!!
运算符(但如果值为null,它可以以NPE异常结束)。只有当您确定此时该值不会为空时才使用,否则您可能会使应用程序崩溃。
此外,还可以使用?:
运算符-如果不是null,则取第一个值,否则取第二个值。这是非常好的,因为您可以使用例如默认值。此外,您还可以在那里抛出异常;)
bitmap ?: throw IllegalStateException("bitmap is null") // exception
bitmap ?: DEFAULT_BITMAP // default bitmap, if any
在这种情况下,您将得到异常,但具有非常可沟通的消息(而不仅仅是NPE)。
我知道是可变变量,但我显式检查了并且是类型,那么为什么不能智能转换为该类型呢? 我怎样才能把它修好呢?
我正在用kotlin为android制作一个小型tasker。我将主要活动分成一些片段,然后为每个片段创建一个视图模型。但是现在这里出现了一个问题。 下面是一些代码: 我本来希望在observer方法的帮助下在主屏幕上看到一些创建的单选按钮,但是我得到了一个例外,这在问题的标题中提到。提前感谢您的帮助!
为什么当我使用No.2脚本时Android Studio显示错误。我发现1和2之间没有区别。 请解释这个案例
我尝试将我的代码从java转换为kotlin,因此我面临这个错误。我不明白为什么我会得到这个错误 错误 我只是附加给我一个错误的代码并突出显示它
所以我最近开始学习Kotlin,我正在学习Java语言的Android Studio教程。我最终使用Android Studio将Java文件转换为Kotlin。 如何修复此错误?
智能转换为“GridLayoutManager”是不可能的,因为“ViewManager”是一个可变属性,此时可能已更改 是错误,AndroidStudio显示时,试图添加一个除法器到我的回收视图。 PixelsFragment.kt 我找到了这个答案,它说这样的问题可能是因为在执行该行时变量可能碰巧为< code>null,然后他们提供了3个解决方案。然而,根据我的理解,< code>viewM