Android记住密码功能
使用checkbox 控件去实现记住密码,通过对checkbox 的监听保存用户的账号和密码,保存前先判断账号和密码是否为空为空则不保存
利用SP保存用户的账号和密码,通过对账号和密码的判断可以确定用户能不能进入下个界面
在OnCreate中通过对sp保存的checkbox 数据读取来判断密码是否重写到控价上
困惑解决
- 在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
延迟初始化不是代表不初始化,后续代码在使用相关变量前一定要先初始化,没有初始化直接引用会造成空指针
-
空指针 在kotlin中空指针已经在预编译环节处理了一次,还会出现此现象就是我们自己在代码环节出了问题,如:延时初始化 -
kotlin的语法糖引起的问题 我们熟知在kotlin中我们的get…可以直接省略get,这不代表set…可以省略set -
逻辑问题 我们要切实思考好事件触发的逻辑,尽量写好部分功能就测试下可以更好的排除问题 深刻理解四大组件的生命周期回调的意义
代码
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")
}
}
}
|