当前位置: 首页 > 知识库问答 >
问题:

如何使用android架构组件实现登录活动架构?

段干浩荡
2023-03-14

我知道如何使用ViewModel,Repository和Room将数据从数据库传输到屏幕。但是如何使用POST方法实现登录活动。我需要从ViewModel或AuthorizationRepository创建LiveData isAuthorated吗?有人能展示在android架构组件中使用命令方法的示例吗?

共有1个答案

云弘壮
2023-03-14

这可以是您的登录类,可能是对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
        }
    }

您可以观察登录状态以做出相应反应并更改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
        }
    }
})

要开始登录,只需调用类的登录方法:

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

 类似资料:
  • 我一直在遵循导航架构组件中的文档,以了解这个新的导航系统是如何工作的。 要从一个屏幕到另一个屏幕进行/返回,您需要一个实现接口的组件。 NavHost是一个空视图,当用户在应用程序中导航时,目的地会随之交换。 但是,似乎目前只有片段实现了< code>NavHost 导航架构组件的默认NavHost实现是NavHostFragment。 所以,我的问题是: > < li> 即使我有一个可以用< c

  • 我目前正在学习新的Android导航架构组件 (https://developer.android.com/topic/libraries/architecture/navigation/). 我有点混淆了它的动机和概念,以下是我的不确定性: Android导航架构组件是否旨在消除在单个应用程序中使用多个活动的需要?这意味着,整个应用程序只需要一个单一活动,所有其他页面都将是片段? 在应用程序中使

  • In Spring Security 3.0, the contents of the spring-security-core jar were stripped down to the bare minimum. It no longer contains any code related to web-application security, LDAP or namespace confi

  • 我有一个带有底部导航视图(BottomNavigationView)和查看页面(ViewPager)的应用程序。如何使用新的“导航架构组件”实现它 最佳做法是什么? 非常感谢

  • 一旦你熟悉了如何设置和运行一些基于命名空间的配置的应用程序,你可能希望了解在命名空间后面这个框架实际的是如何工作的。像大多数软件一样,Spring Security有一些重要的接口和类和一些贯穿整个框架的概念。在参考指南的这部分,我们将看看其中的一部分,看看他们如何协同工作来为Spring Security提供身份验证和访问控制的支持。