Я создал базовый c пример, в котором активность просматривает БД комнаты через LiveData. Для получения дополнительной информации, пожалуйста, проверьте следующий код:
@Dao
interface NoteDao {
@Query("SELECT * FROM note ORDER BY date_created DESC")
fun getAll(): LiveData<List<Note>>
}
// Repository
class ReadersRepository(private val context: Context) {
private val appDatabase = Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME)
.build()
fun getAllNotes(): LiveData<List<Note>> {
return appDatabase.getNoteDao().getAll()
}
}
// ViewModel
class AllNotesViewModel(application: Application) : AndroidViewModel(application) {
private val repository = ReadersRepository(application)
internal var allNotesLiveData: LiveData<List<Note>> = repository.getAllNotes()
}
// Activity
class MainActivity : BaseActivity<AllNotesViewModel>() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
viewModel.allNotesLiveData.observe(this, Observer {
adapter.setData(it)
})
}
}
Итак, вот в чем дело. Работает нормально. Любое обновление БД из фона происходит, когда Activity получает обратный вызов
Однако, почему он не выдает никаких ошибок при доступе (наблюдении) к БД на MainThread?
Правильно ли я реализовал? Чего мне не хватает в этом?