Я делаю приложение, которое использует комнату и Livedata для хранения и отображения данных, я могу создавать и удалять отдельные элементы без проблем, но я изо всех сил пытаюсь создать процесс для обновления значений.
Проблема в том, что мне нужно получить доступ к объекту, связанному с объектом LiveData, за пределами наблюдателя, чтобы изменить значения объекта и обновить его с помощью модели представления, но когда я пытаюсь использовать LiveData.value, я всегда получаю нулевое значениеза пределами наблюдателя и действительный объект внутри наблюдателя (я показываю это, используя тост и перекус, как вы можете видеть в приведенном ниже коде).
Итак, как я могу получить доступ или обновить объект, связанный с LiveDataза пределами наблюдателя?
if(intent.hasExtra("MEDICINE_ID")){
title = getString(R.string.editar_medicamento)
medicamentoActualLive = medicamentoViewModel.getMedicamento(intent.getIntExtra("MEDICINE_ID",-1))
medicamentoActualLive.observe(this, android.arch.lifecycle.Observer {
CampoNombreComercial.setText(it!!.nombreMedicamento,TextView.BufferType.EDITABLE)
CampoNombreGenerico.setText(it!!.nombreGenerico,TextView.BufferType.EDITABLE)
CampoDosis.setText(it!!.dosis,TextView.BufferType.EDITABLE)
CampoNota.setText(it!!.nota,TextView.BufferType.EDITABLE)
val MedicineTypeIndex = this.resources.getStringArray(R.array.TipoMedicamento).indexOf(it!!.tipo)
SpinnerTipoMedicamento.setSelection(MedicineTypeIndex)
MedicamentoIconoTV.setColorFilter(it.color!!)
mCurrentPhotoPath = it.fotografia!!
displayPic()
medicamento = it
Toast.makeText(this@AnadirMedicamentoActivity,"El valor del medicamento live es: " + medicamento.nombreGenerico, Toast.LENGTH_SHORT).show()
})
Snackbar.make(LayoutConstrain,"El valor del medicamento live externo: " + medicamentoActualLive.value?.nombreGenerico, Snackbar.LENGTH_SHORT).show()
}else{
title = getString(R.string.AnadirMedicamento)
}
Процесс сохранения или обновления выполняется в этой функции, вызываемой в методе onClick кнопки с плавающим действием:
private fun saveMedicineToDB(medicamento: Medicamento){
if(intent.hasExtra("USER_ID")){
medicamentoViewModel.update(medicamento)
}else{
medicamentoViewModel.insert(medicamento)
}
setResult(Activity.RESULT_OK)
finish()
}