LiveData。无法分配给'value':setter受保护/ *受保护,package * /用于合成扩展

时间:2018-06-19 07:54:14

标签: android kotlin android-architecture-components android-livedata

我正在尝试按照android documentation中的说明使用LiveData实现数据库观察者。

只要我在Kotlin编程,我就会调整函数(最初用Java编写)。

尝试保存数据时,我发现了这个问题。

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>’

有没有人有这个问题?

这是我的代码:

  

视图模型:

class ProfileViewModel: ViewModel() {

    object FirstName: MutableLiveData<String>()

    fun getCurrentName(): LiveData<String> {
        return FirstName
    }
}
  

片段

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

1 个答案:

答案 0 :(得分:14)

@spkink建议:

替换

fun getCurrentName(): LiveData<String>

使用

fun getCurrentName(): MutableLiveData<String>

由于setValue(T value)在LiveData中是protected而在public中是MutableLiveData,导致了错误。