我了解如何使用ViewModel、Repositories和Room将数据从数据库传输到屏幕。但是如何使用POST方法实现登录活动呢?我需要从ViewModel或AuthorizationRepository创建LiveData isAuthorized吗?有人能展示一下如何使用Android架构组件的命令方法的示例吗?
我了解如何使用ViewModel、Repositories和Room将数据从数据库传输到屏幕。但是如何使用POST方法实现登录活动呢?我需要从ViewModel或AuthorizationRepository创建LiveData isAuthorized吗?有人能展示一下如何使用Android架构组件的命令方法的示例吗?
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
}
}
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
}
}
})
要开始登录,只需调用您的类的登录方法:
loginButton.onClick {
myLoginClass.startLogin("user", "password")
}
从逻辑上讲,你需要更多的东西,但你可以把它当作一个框架来使用。
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