В настоящее время я работаю с базой данных комнат в своем журнальном приложении. Однако всякий раз, когда я пытаюсь вставить новую запись в свое приложение, не изменяя растровую переменную, выбирая изображение, мое приложение аварийно завершает работу и отображает эту ошибку.
2020-12-24 22:44:35.296 31023-31023/com.google.gradient.red E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.gradient.red, PID: 31023
kotlin.UninitializedPropertyAccessException: lateinit property bitmap has not been initialized
at com.google.gradient.red.fragments.add.addFragment.insertDataToDb(AddFragment.kt:132)
at com.google.gradient.red.fragments.add.addFragment.onOptionsItemSelected(AddFragment.kt:111)
Вот мой код:
// I make my bitmap variable
lateinit var bitmap: Bitmap
override fun onAttach(context: Context) {
super.onAttach(context)
var bitmap: Bitmap? = null
}
Строка 111 — это когда я вызываю свою функцию insertDataToDb()
, а строка 132 находится в newData
, где я пытаюсь вставить свою растровую переменную.
kotlin.UninitializedPropertyAccessException: lateinit property bitmap has not been initialized
Сообщение об ошибке понятно. Вы определили поле lateinit
, но так и не инициализировали его.
В вашем коде здесь:
// I make my bitmap variable
lateinit var bitmap: Bitmap
override fun onAttach(context: Context) {
super.onAttach(context)
var bitmap: Bitmap? = null
}
Вы определяете lateinit var
под названием bitmap
. Итак, поскольку вы использовали ключевое слово lateinit
, вам обязательно нужно где-то его инициализировать. Что, я думаю, и есть то, что вы пытались сделать в методе onAttach
. Однако вы определяете новую «локальную» переменную вместо инициализации исходной. Итак, удалите метод onAttach
и измените это:
lateinit var bitmap: Bitmap
К этому:
var bitmap: Bitmap? = null
Я извиняюсь за то, что оставил здесь еще один комментарий, но после того, как я попробовал код без каких-либо изменений (что вызвало некоторые другие проблемы), я получаю эти две ошибки: 'lateinit' modifier is not allowed on properties of nullable types
и 'lateinit' modifier is not allowed on properties with initializer
. Любая помощь будет принята с благодарностью!
Извините, мне плохо. Как говорится в сообщении об ошибке; вы не можете использовать типы, допускающие значение NULL, и ключевое слово lateinit
вместе. Итак, вам просто нужно удалить ключевое слово lateinit
. Я отредактирую свой ответ.
Спасибо за ваш ответ, это решило ошибку, которую я получал! Однако я понял, что показанная здесь ошибка не связана с тем, что я пытался спросить, поэтому я отредактирую свой вопрос, чтобы он больше соответствовал этому ответу, и оставлю его здесь.