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

标签 android kotlin

我在通过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,则不会崩溃,并且仅当somethingsomethingElse均为true时才通过条件(对于非基元,则为non-null)。

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

所有这些都可以在Kotlin Nullability章节中得到更好的解释:)

关于android - Kotlin Android Studio-在类型为Intent的可为空的接收器上仅允许安全(?。)或非空声明(!!。)调用。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56839066/

相关文章:

android - Kotlin 中 SearchView 的过滤器

android - 使用 RxAndroidBle,我如何订阅对特性的写入响应?

android - Android MediaPlayer的问题

android - 自定义操作栏不填充父级

java - 将 ByteArray 转换为固定长度字符串时出现异常

java - 如何保护 APK 文件中的 SFTP 密码

java - 分类器 JSONObject 没有“伴生对象”,因此必须在此处初始化

kotlin - RxJava可观察到错误,可从数据库中获取项目,但仍通过传递错误

android - 无法检查已删除类型的实例 : List<Occupation_Info>

java - @ProjectedPayload/ProjectingJackson2HttpMessageConverter 的默认值