存储库模式未正确返回LiveData

问题描述 投票:0回答:2

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

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

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

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

android repository-pattern android-livedata android-mvvm
2个回答
2
投票

在第一个ViewModel代码中,调用方法a时,将另一个LiveData分配给status变量,该实时数据与Activity观察到的数据不同,因此该值不会通知您的Activity


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.