我在通过Android Studio 3.0开发必备程序时收到此错误代码。 “在Intent类型的可为空的接收器上只允许安全(?。)或非null断言(!!。)调用?”。不知道为什么。上面的代码是我目前正在使用的代码,“意图”已自动生成一个问号。底部代码是本书中显示的内容。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if ((requestCode == request_code) && (resultCode == Activity.RESULT_OK)) {
if (data.hasExtra("returnData")) {
val returnString = data.extras.getString("returnData")
textView1.text = returnString
}
}
}
书中的代码
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
if ((requestCode == request_code) && (resultCode == RESULT_OK)) {
if (data.hasExtra("returnData")) {
val returnString = data.extras.getString("returnData")
textView1.text = returnString
}
}
}
最佳答案
错误(如果您来自Swift),基本上是因为签名:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
指示类型
data
的参数Intent?
的类型为“Nullable”(在Swift中为可选)。意味着您必须先取消引用Optional。在Kotlin中(就像在Swift中一样),您可以使用
?
标记来实现。if (data?.something)
表示如果数据为null或某项为false / null(取决于其类型),则if将不会进入其块。
相同于:
if (data?.something && data?.somethingElse)
如果数据为null,则不会崩溃,并且仅当
something
和somethingElse
均为true时才通过条件(对于非基元,则为non-null)。该书可能引用的是Kotlin的旧版本或Kotlin-Android插件,其中收到的Intent不是可选的,因此不能为null。
所有这些都可以在Kotlin Nullability章节中得到更好的解释:)
关于android - Kotlin Android Studio-在类型为Intent的可为空的接收器上仅允许安全(?。)或非空声明(!!。)调用。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56839066/