Kotlin Android Studio-在类型为Intent的可为空的接收器上仅允许安全(?。)或非空声明(!!。)调用。

Lukas Bimba |

我在通过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
        }
    }
}
马丁·马可西尼(Martin Marconcini)

错误(如果您来自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)

如果数据为空,将只通过条件如果同时这会不会崩溃somethingsomethingElse真实(或非空非原语)。

该书可能引用的是Kotlin的旧版本或Kotlin-Android插件,其中收到的Intent不是可选的,因此不能为null。

Kotlin可空性一章中,所有这些都可以得到更好的解释:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章