Небезопасное использование обнуляемого типа приемника Bundle? Android-приложение скомпилируется с предупреждением, но мгновенно вылетает - PullRequest
1 голос
/ 14 мая 2019

Я новичок в программировании на 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()
        }
    }
}

Кажется, ошибка в блоке "WHEN" onActivityResult.

Я обернул данные (передаваемое намерение) в пустые проверки, попытался объявить их как новое значение с нулевой проверкой, но он постоянно получает одно и то же предупреждение при компиляции:

Небезопасноиспользовать обнуляемый приемник типа Bundle?

Также постоянно говорится об этом устаревшем предупреждении: в этой сборке использовались устаревшие функции Gradle, что делает его несовместимым с Gradle 6.0.

Я переключил Gradleверсия до 5.1.1 и плагин Android Gradle в настоящее время на 3.4.0 (может быть любой из них является частью моей проблемы)

1 Ответ

2 голосов
/ 14 мая 2019

data.extras может быть нулевым, поэтому обязательно используйте его с ?. и as?:

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

Все три убедитесь, что если data, data.extras или "data" равны нулю или не Bitmap, сама цепочка равна нулю.

Устаревшие функции Gradle обычно представляют собой предупреждения об устаревших API. Просто убедитесь, что все ваши плагины обновлены до самых новых и не обновляйте до Gradle 6, если вам нужны плагины, которые не адаптируются к новому API. Но пока он только предупреждает вас о соответствующих изменениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...