不安全地使用可为空的接收器类型 Bundle?android 应用程序将编译时发出警告但立即崩溃

pqu*_*ery 7 android android-intent kotlin

我是 kotlin 和 android 编程的新手,似乎这种语言在没有一些落后功能的情况下发展得相当快。

这是我在 MainActivity.kt 中的两个主要功能

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    cameraButton.setOnClickListener {
        val callCameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        if(callCameraIntent.resolveActivity(packageManager) != null) {
            startActivityForResult(callCameraIntent, CAMERA_REQUEST_CODE)
        }
    }

    replaceFragment(ReportsFragment())
    bottom_navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)


}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    val dt: Intent? = data

    when(requestCode) {
        CAMERA_REQUEST_CODE -> {
            if(resultCode == Activity.RESULT_OK && data != null) {
            //if(data != null) {
                //&& data != null){
                photoImageView.setImageBitmap(data.extras.get("data") as Bitmap)
            }
        }
        else -> {
            Toast.makeText(this, "Unrecognized request code", Toast.LENGTH_SHORT).show()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

错误似乎出现在 onActivityResult 的“WHEN”块中。

我已经将数据(正在传递的意图)包装在空检查中,尝试将其声明为具有空检查的新值,但在编译时它不断收到相同的警告:

不安全地使用 Bundle 类型的可空接收器?

它还一直在说这个已弃用的警告:此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 6.0 不兼容。

我已将 gradle 版本切换到 5.1.1,并且当前的 android Gradle 插件为 3.4.0(其中任何一个都可能是我的问题的一部分)

tyn*_*ynn 10

data.extras可能为空,所以一定要与使用它?.as?

photoImageView.setImageBitmap(data?.extras?.get("data") as? Bitmap)
Run Code Online (Sandbox Code Playgroud)

所有这三个都确保 if datadata.extrasor"data"为 null 或 not a Bitmap,链本身为空。

已弃用的 Gradle 功能通常是关于已弃用 API 的警告。只要确保将所有插件更新为最新插件,只要您需要不适应新 API 的插件,就不要更新到 Gradle 6。但现在它只是警告你有关的变化。