что дает больше контроля.
дно, Room не может обрабатывать MutableLiveData, и мы должны придерживаться LiveData, поскольку он возвращает следующую ошибку:
error: Not sure how to convert a Cursor to this method's return type
Я создал "пользовательские" MutableLiveData в моем помощнике по БД следующим образом:
class ProfileRepository @Inject internal constructor(private val profileDao: ProfileDao): ProfileRepo{
override fun insertProfile(profile: Profile){
profileDao.insertProfile(profile)
}
val mutableLiveData by lazy { MutableProfileLiveData() }
override fun loadMutableProfileLiveData(): MutableLiveData<Profile> = mutableLiveData
inner class MutableProfileLiveData: MutableLiveData<Profile>(){
override fun postValue(value: Profile?) {
value?.let { insertProfile(it) }
super.postValue(value)
}
override fun setValue(value: Profile?) {
value?.let { insertProfile(it) }
super.setValue(value)
}
override fun getValue(): Profile? {
return profileDao.loadProfileLiveData().getValue()
}
}
}
Таким образом, я получаю обновления из БД и могу сохранитьProfile
объект, но я не могу изменить атрибуты.
Например:mutableLiveData.value = Profile()
должно сработать.mutableLiveData.value.userName = "name"
назвал быgetValue()
вместоpostValue()
и не будет работать.
Кто-нибудь нашел решение для этого?