Я довольно новичок в Android Room, где используются LiveData, с которыми я тоже не знаком. Я заметил, что в уроках возвращаемые данные используют LiveData
упаковщик, например:
@Dao
interface PersonDao {
@Query("SELECT * FROM person")
fun getAll(): LiveData<List<Person>>
}
Затем, чтобы прочитать данные, я использую этот код:
class PersonListActivity: AppCompatActivity() {
List<Person> personList = listOf()
init {
val db = RoomDatabase.getDatabaseInstance()
db.personDao.getAll().observe(this, Observe<List<Person>> { data ->
personList = data
})
}
}
Проблема заключается в ошибке повышения IDE "несоответствие типов". Обязательно: LifeCycleOwner. Найдено: PersonListActivity. Я не понимаю, как учебники могут случайно указать «this» в параметре наблюдения владельца. Я также попытался указать context
и applicationContext
в параметре владельца, и он не работает.
После изучения класса LifeCycleOwner
я попытался добавить реализацию LifeCycleOwner. Но тогда класс требует реализации функции getLifeCycle()
. Итак, я вернулся к нулю.
class PersonListActivity: AppCompatActivity(), LifeCycleOwner {
List<Person> personList = listOf()
init {
val db = RoomDatabase.getDatabaseInstance()
db.personDao.getAll().observe(this, Observe<List<Person>> { data ->
personList = data
})
}
override fun getLifeCycle() {
// what should I return here??????
}
}
Почему во всех руководствах, которые я читаю о LiveData, вообще ничего не говорится о LifeCycleOwner? Я использую здесь неправильную функцию наблюдения?
public abstract class LiveData<T> {
...
@MainThread
public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer) { ... }
...
}