美文网首页
ViewModel+liveData 登陆的例子

ViewModel+liveData 登陆的例子

作者: 雨来 | 来源:发表于2021-05-27 18:30 被阅读0次

    去androiod develper上看例子 看完后,还是不知道怎么写登录 userName 定义一个liveData 然后 password再定义一个liveData 然后就 懵逼了,再然后就自己写一个例子吧 帮助不熟悉的兄弟快入门。

    界面

    image.png

    布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ui.test.MyLoginActivity">
    
    
        <EditText
            android:hint="请输入用户名"
            android:id="@+id/username_my_login"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintVertical_bias="0.3"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintWidth_percent="0.8"
            app:layout_constraintHeight_percent="0.09"
            android:layout_width="0dp"
            android:layout_height="0dp"></EditText>
    
        <EditText
            android:hint="请输入密码"
            android:id="@+id/password_my_login"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginTop="20dp"
            app:layout_constraintLeft_toLeftOf="@+id/username_my_login"
            app:layout_constraintRight_toRightOf="@id/username_my_login"
            app:layout_constraintTop_toBottomOf="@+id/username_my_login"
            app:layout_constraintWidth_percent="0.8"
            app:layout_constraintHeight_percent="0.09"></EditText>
    
        <Button
            android:text="登录"
            android:id="@+id/btn_login_my_login"
            android:layout_marginTop="30dp"
            app:layout_constraintLeft_toLeftOf="@id/password_my_login"
            app:layout_constraintRight_toRightOf="@+id/password_my_login"
            app:layout_constraintTop_toBottomOf="@+id/password_my_login"
            app:layout_constraintWidth_percent="0.33"
            app:layout_constraintHeight_percent="0.09"
            android:layout_width="0dp"
            android:layout_height="0dp"></Button>
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    页面Activity

    package com.www.viewmodeldemo.ui.test
    
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.widget.Toast
    import androidx.lifecycle.Observer
    import androidx.lifecycle.ViewModel
    import androidx.lifecycle.ViewModelProvider
    import com.www.viewmodeldemo.R
    import kotlinx.android.synthetic.main.activity_my_login.*
    
    //viewModel提供数据我们需要的是登录功能那么 viewModel只需要告诉我们是否登录成功就ok了
    class MyLoginActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_my_login)
    
            var viewModel = ViewModelProvider(this, object : ViewModelProvider.Factory {
                override fun <T : ViewModel?> create(modelClass: Class<T>): T {
    
                    return MyLoginViewModel() as T
                }
            }).get(MyLoginViewModel::class.java)
    
            viewModel.realLoginStatus.observe(this, Observer { isSuccess->
    
                if(isSuccess){
                    Toast.makeText(this,"成功了",Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(this,"失败了",Toast.LENGTH_SHORT).show();
                }
    
            })
    
            //登录按钮
            btn_login_my_login.setOnClickListener {
    
                viewModel.login(username_my_login?.text.toString(),password_my_login?.text.toString())
    
            }
    
        }
    }
    

    ViewModel

    /**
     *@time:
     *@author yulai
     */
    class MyLoginViewModel:ViewModel() {
    
        private val loginStatus = MutableLiveData<Boolean>()
    
        val realLoginStatus = loginStatus
    
        fun login(userName:String,password:String){
            //在这里做异步请求 登录接口根据返回的值 给 loginStatus赋值
            loginStatus.value = userName=="yulai"&&password=="123456"
        }
    }
    

    相关文章

      网友评论

          本文标题:ViewModel+liveData 登陆的例子

          本文链接:https://www.haomeiwen.com/subject/dkydsltx.html