web-dev-qa-db-fra.com

Données en direct. Impossible d'attribuer à «valeur»: le setter est protégé / * protégé et le package * / pour l'extension synthétique

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
    }
}
14
kike

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.

19
RPG