不安全使用可为空的接收器类型捆绑? Android应用程序将在编译时发出警告,但会立即崩溃

时间:2019-05-14 10:13:22

标签: 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()
        }
    }
}

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

我已将数据(通过Intent的数据)包装为null检查,试图通过null检查将其声明为新值,但在编译时始终会得到相同的警告:

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

它还不断说这个贬值的警告: 此版本使用了不推荐使用的Gradle功能,使其与Gradle 6.0不兼容。

我已将gradle版本切换到5.1.1,并且当前具有3.4.0的android Gradle插件(这两个问题都可能属于我的问题)

1 个答案:

答案 0 :(得分:1)

data.extras可能为null,因此请确保将其与?.as?一起使用:

photoImageView.setImageBitmap(data?.extras?.get("data") as? Bitmap)

所有这三个都确保如果datadata.extras"data"为空或不是Bitmap,则链本身为空。

不推荐使用的Gradle功能通常是有关不推荐使用的API的警告。只要确保将所有插件更新为最新的插件,并且只要您需要不适应新API的插件,就不要更新到Gradle 6。但是目前,它只是警告您有关的更改。