Свойство Lateinit не инициализировано (Android, Kotlin)

В настоящее время я работаю с базой данных комнат в своем журнальном приложении. Однако всякий раз, когда я пытаюсь вставить новую запись в свое приложение, не изменяя растровую переменную, выбирая изображение, мое приложение аварийно завершает работу и отображает эту ошибку.

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, где я пытаюсь вставить свою растровую переменную.

1
0
7 570
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Спасибо за ваш ответ, это решило ошибку, которую я получал! Однако я понял, что показанная здесь ошибка не связана с тем, что я пытался спросить, поэтому я отредактирую свой вопрос, чтобы он больше соответствовал этому ответу, и оставлю его здесь.

Mark Zhou 25.12.2020 22:59

Я извиняюсь за то, что оставил здесь еще один комментарий, но после того, как я попробовал код без каких-либо изменений (что вызвало некоторые другие проблемы), я получаю эти две ошибки: 'lateinit' modifier is not allowed on properties of nullable types и 'lateinit' modifier is not allowed on properties with initializer. Любая помощь будет принята с благодарностью!

Mark Zhou 25.12.2020 23:52

Извините, мне плохо. Как говорится в сообщении об ошибке; вы не можете использовать типы, допускающие значение NULL, и ключевое слово lateinit вместе. Итак, вам просто нужно удалить ключевое слово lateinit. Я отредактирую свой ответ.

Salih Kavaf 26.12.2020 07:40

Другие вопросы по теме