IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> day 2 记住密码功能(登陆界面) -> 正文阅读

[移动开发]day 2 记住密码功能(登陆界面)

Android记住密码功能

使用checkbox 控件去实现记住密码,通过对checkbox 的监听保存用户的账号和密码,保存前先判断账号和密码是否为空为空则不保存

利用SP保存用户的账号和密码,通过对账号和密码的判断可以确定用户能不能进入下个界面

在OnCreate中通过对sp保存的checkbox 数据读取来判断密码是否重写到控价上

困惑解决

  1. 在kotlin中申明全局变量?

我在代码编写过程中一个空间就要赋值好几次,太过于繁琐我们可以采用延迟实例化方法来实现

   private lateinit var checkBox: CheckBox
   private lateinit var password: EditText
   private lateinit var account: EditText
   private lateinit var account_num: String
   private lateinit var password_num: String

延迟初始化不是代表不初始化,后续代码在使用相关变量前一定要先初始化,没有初始化直接引用会造成空指针

  1. 空指针
    在kotlin中空指针已经在预编译环节处理了一次,还会出现此现象就是我们自己在代码环节出了问题,如:延时初始化

  2. kotlin的语法糖引起的问题
    我们熟知在kotlin中我们的get…可以直接省略get,这不代表set…可以省略set

  3. 逻辑问题
    我们要切实思考好事件触发的逻辑,尽量写好部分功能就测试下可以更好的排除问题
    深刻理解四大组件的生命周期回调的意义

代码

package com.xuchi.login

import android.content.Intent
import android.content.SharedPreferences
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.CheckBox
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AlertDialog

class LoginActivity : AppCompatActivity() {

    private lateinit var checkBox: CheckBox
    private lateinit var password: EditText
    private lateinit var account: EditText
    private lateinit var account_num: String
    private lateinit var password_num: String


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        account = findViewById(R.id.et_name)
        password = findViewById(R.id.et_pass)
        checkBox = findViewById(R.id.cb)




        val sp = getSharedPreferences("Account", 0)
        checkBox.isChecked = sp.getBoolean("checkBox", false)
        if (checkBox.isChecked) {
            account.setText(sp.getString("account_num", " "))
            password.setText(sp.getString("password_num", " "))
        }

    }

    fun onClick(view: android.view.View) {


        account_num=account.text.toString().trim() ?: "uu"
        password_num=password.text.toString().trim() ?: "uu"

        if (account_num.isEmpty() || password_num.isEmpty()) {
            Toast.makeText(
                this,
                "账号或密码为空",
                Toast.LENGTH_SHORT
            ).show()

        }else if (account_num == "你爸爸" && password_num == "0819") {
            val intent = Intent(this, ContentActivity::class.java)
            startActivity(intent)
        } else {
            val alertDialog = AlertDialog.Builder(this)
            alertDialog.apply {
                setTitle("提示")
                setMessage("姓名,誓言")
                setNegativeButton("取消", null)
                setPositiveButton("确认", null)
            }.show()
        }


    }

    override fun onResume() {
        super.onResume()
        checkBox.setOnClickListener {

            val sharedPreferences=getSharedPreferences("Account",0).edit()
            account_num=account.text.toString().trim() ?: ""
            password_num=password.text.toString().trim() ?: ""

            if (checkBox.isChecked&&!account_num.isEmpty()&&!password_num.isEmpty()){
                sharedPreferences.apply{
                    putBoolean("checkBox",true)
                    putString("account_num",account_num)
                    putString("password_num",password_num)
                }.commit()
            }else{
                sharedPreferences.apply{
                    putBoolean("checkBox",false)
                }.commit()
            }
            Log.d("setOnClickListener","setOnClickListener")
        }
    }
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:50:06  更:2021-11-14 21:51:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:02:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码