我正在尝试使用 android documentation 中所述的 LiveData 实现 DB Observer .
只要我在 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>’
有人遇到过这个问题吗?
这是我的代码:
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
}
}
最佳答案
正如@spkink 建议的那样:
替换
fun getCurrentName(): LiveData<String>
与
fun getCurrentName(): MutableLiveData<String>
错误是因为 setValue(T value)
在 LiveData 中是 protected
(所以你不能调用它)而它是 public
在MutableLiveData
.
关于android - 实时数据。无法分配给 ‘value’ : the setter is protected/*protected and package*/for synthetic extension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50923273/