Kotlin: чтение базы данных с помощью LiveData Показывает мне пустой RecycleView

#android #kotlin

#Android #kotlin

Вопрос:

Я использую базу данных Room, LiveData и ViewModel в своем проекте с Kotlin. у меня есть предварительно заполненная база данных, которую я создал ранее. моя цель — прочитать эту базу данных и отобразить данные в базе данных в режиме рециркуляции с использованием Room. поэтому я копирую базу данных в папку активов и использую .createFromAsset метод. когда я запускаю копирование базы данных проекта в path data/data/packagename .моя проблема в том, что когда я запускаю проект, он ничего не показывает мне в моем recycleveiw. я проверяю код несколько раз и вижу много примеров, но каждый раз он показывает мне пустой recycleview и никогда не показывает информацию о моей базе данных. я действительно в замешательстве и не могу найти, в чем моя проблема. можете ли вы сказать мне, где я ошибаюсь? спасибо. вот мой код :

Адаптер Recycleview :

        override fun onBindViewHolder(holder: RoomViewHolder, position: Int) {
    if(holder is RoomViewHolder) {
        val current = entitys[position]
     
        holder.placeNameTextView.text = current.name
    }
}

internal fun setentitiys(entitis: List<Detail_Entity>) {
    this.entitys = entitys
    notifyDataSetChanged()
}

override fun getItemCount() = entitys.size

inner class RoomViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    var placeNameTextView: TextView = itemView.placeNameTextView

}
  

Комментарии:

1. Похоже, вы на правильном пути. Вы уверены, что у вас есть данные в таблице? Можете ли вы проверить с помощью инспектора базы данных?

2. @M D да. когда я копирую базу данных из data / data / package name из хранилища эмулятора на свой компьютер и открываю с помощью database inspector, я вижу свою таблицу со всеми моими данными внутри.

Ответ №1:

Room_Adapter

 internal fun setentitiys(entitis: List<Detail_Entity>) {
    this.entitys = entitis //Notice this !!
    notifyDataSetChanged()
}
  

Класс сущности

  • Установите первичный ключ: @PrimaryKey. Это обязательно.
  • Вы использовали имя таблицы ‘my_table’ в Detail_Dao. Поэтому добавьте @Entity(имя_таблицы = «my_table»)

Комментарии:

1. моя сущность и класс dao в порядке. его просто осталось скопировать / вставить. итак, вы говорите «добавьте новый объект Entity_detail в список LiveData, если хотите его просмотреть». как я могу это сделать?

2. Нет, вам не нужно это делать. Я обновил ответ.