Але*_*нко 5 architecture android mvvm
我了解如何使用 ViewModel、Repositories 和 Room 将数据从数据库传输到屏幕。但是如何使用 POST 方法实现登录活动。我是否需要从 ViewModel 或 AuthorizationRepository 创建 LiveData isAuthorized?任何人都可以展示有关在 android 架构组件中使用命令方法的示例吗?
这可以是您的登录类,可能扩展 ViewModel,因此它在配置更改时保持活动状态:
class LoginClass
{
var loginEvent = SingleLiveEvent<LoginEvent>()
fun startLogin(user: String, password: String)
{
loginEvent.value= LoginEvent(LoginStatus.LoginStart,null,null)
launch(UI) {
try{
bg{
//do login process
}.await()
loginEvent.value= LoginEvent(LoginStatus.LoginOk,null,null)
}
catch (error: Exception){
loginEvent.value= LoginEvent(LoginStatus.LoginFailed,error.message,null)
}
}
}
data class LoginEvent(var loginStatus: LoginStatus, var errorMessage: String?, var loginExtraData: Any?)
enum class LoginStatus
{
LoginStart,
LoginOk,
LoginFailed
}
}
Run Code Online (Sandbox Code Playgroud)
您可以观察登录状态以做出反应并相应地更改您的 UI:
val myLoginClass = LoginClass()
myLoginClass.loginEvent.observe(this@LifecycleOwner, Observer {
if(it==null)
return@Observer
when(it.loginStatus)
{
LoginClass.LoginStatus.LoginStart -> {
//show indeterinate progress bar, disable inputs, etc
}
LoginClass.LoginStatus.LoginOk -> {
//go to logged in activity
}
LoginClass.LoginStatus.LoginFailed -> {
//show login failed toast, hide progress bar, enable input, etc
}
}
})
Run Code Online (Sandbox Code Playgroud)
要开始登录,只需调用类的登录方法:
loginButton.onClick {
myLoginClass.startLogin("user", "password")
}
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,您需要的不仅仅是这个,但您可以将其用作骨架。
SingleLiveEvent 可以在这里找到:https://github.com/googlesamples/android-architecture/blob/dev-todo-mvvm-live/todoapp/app/src/main/java/com/example/android/architecture/blueprints/ todoapp/SingleLiveEvent.java