存储库模式未正确返回LiveData

时间:2019-12-17 07:00:58

标签: android repository-pattern android-livedata android-mvvm

我正在使用MVVM,LiveData并尝试实现存储库模式。

但是,在我的存储库类-RegisterRepo中调用返回LiveData的方法是行不通的。我不知道为什么。任何建议将不胜感激。

删除样板代码以简化代码。

Activity的{​​{1}}

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

2 个答案:

答案 0 :(得分:2)

在第一个ViewModel代码中,调用方法a时,您将另一个LiveData分配给status变量,此实时数据与{{1} },以便该值不会通知您的Activity

答案 1 :(得分:1)

第二种方法正确使用,并且第一种方法不起作用,因为您正在RegisterRepo中创建新的MutableLive数据,因此基本上,在您创建可观察到的“状态”时,将分配给价值转化为不同。所以第二种是唯一的方法