ViewModel+liveData 登陆的例子

2021-05-27  本文已影响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"
    }
}
上一篇下一篇

猜你喜欢

热点阅读