我是 Kotlin 的新手。我有一个Android项目,我选择将其转换为kotlin。这是我的代码段。
import com.beardedhen.androidbootstrap.BootstrapButton
class EndTrip : AppCompatActivity(){
internal var endtrip: BootstrapButton ?= null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_end_trip)
endtrip.setOnClickListener(View.OnClickListener {
//Some code here
}
}
}
但我在旅程结束时发现了这个错误
智能强制转换为 BootsrapButton 是不可能的,因为 endtrip 是可变属性,此时已更改
这里已经回答了一个类似的问题,但是我想不出解决方案。我用的是beardedhen Android Bootstrap库。谢谢你。
我已经解决了这个问题。我删除了endtrip的全局声明,并在onCreate方法中初始化它,如下所示。
import com.beardedhen.androidbootstrap.BootstrapButton
class EndTrip : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_end_trip)
var endtrip: BootstrapButton = findViewById(R.id.endtrip) as BootstrapButton
endtrip.setOnClickListener(View.OnClickListener {
//Some code here
}
}
}
但我担心的是,如果我想在其他方法中使用变量怎么办?
val是静态的,var是可变的。科特林更喜欢一切都是静态的,在你称之为静态的地方更是如此。
只是为了澄清一点,Kotlin只喜欢你在方法中使用var,它不喜欢它的主要内容。它想要在那里增值。
var是不可变变量var是可变的。
该错误告诉您,您无法保证<code>endtrip</code>在该代码行不为空。原因是endtrip
是一个var
。它可以由其他线程进行变异,即使您在使用该变量之前进行了空检查。
以下是官方文件的解释:
请注意,当编译器无法保证变量在检查和使用之间不能更改时,智能转换不起作用。更具体地说,智能转换根据以下规则适用:
最简单的解决方案是使用安全调用操作符< code >?
endtrip?.setOnClickListener(View.OnClickListener {
//Some code here
}
建议阅读:在Kotlin中,处理可空值、引用或转换它们的惯用方法是什么
我知道是可变变量,但我显式检查了并且是类型,那么为什么不能智能转换为该类型呢? 我怎样才能把它修好呢?
为什么当我使用No.2脚本时Android Studio显示错误。我发现1和2之间没有区别。 请解释这个案例
我还在另一个类中使用了bitmap2和Bitmap1: 这里写着:类型不匹配,必需:位图找到:位图?
所以我最近开始学习Kotlin,我正在学习Java语言的Android Studio教程。我最终使用Android Studio将Java文件转换为Kotlin。 如何修复此错误?
我正在用kotlin为android制作一个小型tasker。我将主要活动分成一些片段,然后为每个片段创建一个视图模型。但是现在这里出现了一个问题。 下面是一些代码: 我本来希望在observer方法的帮助下在主屏幕上看到一些创建的单选按钮,但是我得到了一个例外,这在问题的标题中提到。提前感谢您的帮助!
智能转换为“GridLayoutManager”是不可能的,因为“ViewManager”是一个可变属性,此时可能已更改 是错误,AndroidStudio显示时,试图添加一个除法器到我的回收视图。 PixelsFragment.kt 我找到了这个答案,它说这样的问题可能是因为在执行该行时变量可能碰巧为< code>null,然后他们提供了3个解决方案。然而,根据我的理解,< code>viewM