存储库模式未正确返回 LiveData

Repository pattern is not correctly returning LiveData

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

但是,在我的存储库 class - RegisterRepo 中调用方法 returns LiveData 不起作用。我不知道为什么。任何建议将不胜感激。

为简洁起见,删除了样板代码。

ActivityonCreateMethod

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" 的可观察对象时是不同的你给它赋值的地方是不同的。所以第二个是唯一的方法