存储库模式未正确返回 LiveData
Repository pattern is not correctly returning LiveData
我正在使用 MVVM、LiveData 并尝试实施存储库模式。
但是,在我的存储库 class - RegisterRepo
中调用方法 returns LiveData
不起作用。我不知道为什么。任何建议将不胜感激。
为简洁起见,删除了样板代码。
Activity
的 onCreateMethod
mViewModel.status.observe(this, Observer {
when (it) {
true -> {
Log.d("----------", " true ") //These message is never being printed.
}
false -> {
Log.d("----------", "false ") //These message is never being printed.
}
}
})
button.setOnClickListener {
mViewModel.a()
}
ViewModel
class AuthViewModel (val repo: RegisterRepo): ParentViewModel() {
//...
var status = MutableLiveData<Boolean>()
fun a() {
status = repo.a()
}
}
RegisterRepo
class RegisterRepo () {
fun a(): MutableLiveData<Boolean> {
var result = MutableLiveData<Boolean>()
result.value = true
return result
}
}
但是,如果我将 ViewModel
中的代码更改为此,一切正常。
ViewModel
class AuthViewModel (val repo: RegisterRepo): ParentViewModel() {
//...
var status = MutableLiveData<Boolean>()
fun a() {
status.value = true //Change here causing everything work as expected.
}
}
在第一个 ViewModel 代码中,当调用方法 a
时,您将另一个 LiveData
分配给 status
变量,此实时数据与 [= 观察到的数据不同13=],这样该值就不会通知您的 Activity
第二种方法使用正确,并且可以正常工作第一种方法不起作用,因为您正在 RegisterRepo 中创建新的 MutableLive 数据,所以基本上在您创建 "status" 的可观察对象时是不同的你给它赋值的地方是不同的。所以第二个是唯一的方法
我正在使用 MVVM、LiveData 并尝试实施存储库模式。
但是,在我的存储库 class - RegisterRepo
中调用方法 returns LiveData
不起作用。我不知道为什么。任何建议将不胜感激。
为简洁起见,删除了样板代码。
Activity
的 onCreateMethod
mViewModel.status.observe(this, Observer {
when (it) {
true -> {
Log.d("----------", " true ") //These message is never being printed.
}
false -> {
Log.d("----------", "false ") //These message is never being printed.
}
}
})
button.setOnClickListener {
mViewModel.a()
}
ViewModel
class AuthViewModel (val repo: RegisterRepo): ParentViewModel() {
//...
var status = MutableLiveData<Boolean>()
fun a() {
status = repo.a()
}
}
RegisterRepo
class RegisterRepo () {
fun a(): MutableLiveData<Boolean> {
var result = MutableLiveData<Boolean>()
result.value = true
return result
}
}
但是,如果我将 ViewModel
中的代码更改为此,一切正常。
ViewModel
class AuthViewModel (val repo: RegisterRepo): ParentViewModel() {
//...
var status = MutableLiveData<Boolean>()
fun a() {
status.value = true //Change here causing everything work as expected.
}
}
在第一个 ViewModel 代码中,当调用方法 a
时,您将另一个 LiveData
分配给 status
变量,此实时数据与 [= 观察到的数据不同13=],这样该值就不会通知您的 Activity
第二种方法使用正确,并且可以正常工作第一种方法不起作用,因为您正在 RegisterRepo 中创建新的 MutableLive 数据,所以基本上在您创建 "status" 的可观察对象时是不同的你给它赋值的地方是不同的。所以第二个是唯一的方法