与Android MVVM协同工作

与Android MVVM协同工作,android,kotlin,mvvm,coroutine,Android,Kotlin,Mvvm,Coroutine,我需要在MVVM模式上实现Kotlin协程,我尝试在ViewModel上使用actors来测试这一点,问题是我不知道如何正确地使用它。 我知道我需要从actoroffer/send方法中的视图发送调用,但是如何控制它呢?我需要为每个viewmodel创建每个密封类 演员: private val gradeActor = viewModelScope.actor<ActorCommand<String>>(Dispatchers.Main) { for (

我需要在MVVM模式上实现
Kotlin协程
,我尝试在
ViewModel
上使用
actors
来测试这一点,问题是我不知道如何正确地使用它。 我知道我需要从actor
offer/send
方法中的视图发送调用,但是如何控制它呢?我需要为每个viewmodel创建每个密封类

演员:

private val gradeActor = viewModelScope.actor<ActorCommand<String>>(Dispatchers.Main) {
        for (command in channel) {
            when (command) {
                is ActorCommand.REGISTER -> {

                    // do
                }
            }


        }
    }
对于LoginViewModel,我使用:

sealed class TwoFaCommand {
    class VERIFY(val code: String, val sessionId: String) : TwoFaCommand()
    class CONFIRM(val secretKey: String, val manualCode: String, val code: String) : TwoFaCommand()
    class SAVE(val secretKey: String, val manualCode: String, val code: String) : TwoFaCommand()
}
sealed class LoginCommand {
    class LOGIN(val email: String, val password: String) : LoginCommand()
    class LOGIN_VALIDATE(val email: String, val password: String) : LoginCommand()
    class SAVE_USER_DATA(val email: String, val password: String) : LoginCommand()
    object USER_IV : LoginCommand()
}
参与者调用时(LoginViewModel):

private val eventActor=viewModelScope.actor(Dispatchers.Main、Channel.RENDEZVOUS){
for(通道中的命令){
何时(命令){
是LoginCommand.LOGIN->{
loadingStateLiveData.postValue(true)
loginLiveData.postValue(loginRepository.getLogin(Login(command.email,command.password)))
loadingStateLiveData.postValue(false)
}
是LoginCommand.SAVE\u USER\u DATA->{
loginSavedRepository.saveUserData(command.email、command.password)
}
}
}
}
真的有必要为每个viewmodel和通道通信创建一个密封的类吗?(就像我正在做的那样)

sealed class LoginCommand {
    class LOGIN(val email: String, val password: String) : LoginCommand()
    class LOGIN_VALIDATE(val email: String, val password: String) : LoginCommand()
    class SAVE_USER_DATA(val email: String, val password: String) : LoginCommand()
    object USER_IV : LoginCommand()
}
private val eventActor = viewModelScope.actor<LoginCommand>(Dispatchers.Main, Channel.RENDEZVOUS) {
        for (command in channel) {
            when (command) {
                is LoginCommand.LOGIN -> {
                    loadingStateLiveData.postValue(true)
                    loginLiveData.postValue(loginRepository.getLogin(Login(command.email, command.password)))
                    loadingStateLiveData.postValue(false)
                }
                is LoginCommand.SAVE_USER_DATA -> {
                    loginSavedRepository.saveUserData(command.email, command.password)
                }
            }
        }
    }