J'essaie d'implémenter un DB Observer avec LiveData comme décrit dans le documentation Android .
Tant que je programme en Kotlin, j'adapte les fonctions (écrites à l'origine en Java).
Lorsque j'essaie d'enregistrer les données, je trouve ce problème.
Cannot assign to ‘value’: the setter is protected/*protected and package*/ for synthetic extension in ‘<library Grade: Android.Arch.livecycle:livedata-core-1.1.1>’
Quelqu'un avait-il déjà ce problème?
Voici mon code:
ViewModel:
class ProfileViewModel: ViewModel() {
object FirstName: MutableLiveData<String>()
fun getCurrentName(): LiveData<String> {
return FirstName
}
}
Fragment
class ProfileFragment{
private lateinit var model: ProfileViewModel
// this is called onViewCreated. inputFirstName is an Edittext.
override fun setUp() {
model = ViewModelProviders.of(this).get(ProfileViewModel::class.Java)
val nameObserver = Observer<String> { firstName ->
inputFirstName.text = SpannableStringBuilder(firstName)
}
model.getCurrentName().observe(this, nameObserver)
}
fun saveProfileData() {
val firstName = inputFirstName.text.toString()
model.getCurrentName().value = firstName
}
}
Comme l'a suggéré @spkink:
remplacer
fun getCurrentName(): LiveData<String>
avec
fun getCurrentName(): MutableLiveData<String>
L'erreur est due au fait que setValue(T value)
est protected
dans LiveData (vous ne pouvez donc pas l'appeler) alors qu'il est public
dans MutableLiveData
.