Свойство lateinit не было инициализировано. Не могу найти способ его инициализации. - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть свойство lateinit в моей активности Kotlin, это упрощенная версия:

class CreateNewListOfQuestions : AppCompatActivity() {
    lateinit var questionAnswerListOfObjects: ArrayList<QuestionAnswerObject>
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_create_new_list_of_questions)

        save.setOnClickListener {
            questionAnswerListOfObjects.add(0, QuestionAnswerObject("question", "answer", 1))
        }
    }
}

Основная проблема заключается в том, что, когда я генерирую мобильное приложение и нажимаю кнопку «Сохранить», приложение перестает работать.Logcat показывает эту ошибку: «Свойство lateinit questionAnswerListOfObjects не было инициализировано»

Я пробовал много способов его инициализации, но эти способы мне не помогли.Как мне правильно его инициализировать?Я собираюсь добавить в ArrayList много объектов этого класса:

class QuestionAnswerObject(var question: String, var answer: String, var probability: Int=100) {}

1 Ответ

0 голосов
/ 25 ноября 2018

Это зависит от того, что вы хотите.

Например, если все, что вам нужно, использует ArrayList<QuestionAnswerObject>, вам вообще не нужно lateinit:

var questionAnswerListOfObjects = ArrayList<QuestionAnswerObject>()

будет достаточно

Если вы хотите получить от Bundle или от чего-то еще - вы должны инициализировать его перед использованием .

В основном ключевое слово lateinit используется только для того, чтобы сказать «эй, компилятор, У меня есть переменная, она еще не инициализирована, но я обещаю, что она будет инициализирована, прежде чем я ее использую, поэтому, пожалуйста, пометьте ее как ненулевое поле ".

Так что если вы действительно хотите использовать lateinitпросто инициализируйте это свойство ранее, например добавьте после setContentView

questionAnswerListOfObjects = ArrayList<QuestionAnswerObject>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...