SharedPreference对象存储用户信息和读取信息过程
一、实现要点
(1)在使用记住密码模式下,通过SharedPreference对象存储用户输入的用户名及密码。
(2)当从Mainactivity退出到登录界面时,读取SharedPreference对象中存储数据,将用户名和密码自动写到登录Activity。
(3)当用户输入错误密码或者账号时,弹出提示窗,选择取消则返回,选择重新输入则清空输入框内容
二、实现效果图
三、实现步骤
1、创建新项目,在Mainactivity布局添加按钮,并设置跳转登录界面的点击事件
Mainactivity布局代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#5500DD"
android:textColor="@color/white"
android:text="退出"
android:width="200dp"
android:height="50dp"
android:textSize="25dp"
android:layout_marginLeft="100dp"
android:id="@+id/return_login"
/>
</LinearLayout>
Mainactivity.kt代码如下:
package com.example.test03
import android.app.AlertDialog
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
return_login.setOnClickListener {
val intent = Intent(this, log_on::class.java)
this.startActivity(intent)
}
}
}
2、创建一个登录Activity,设置输入用户信息的控件,一个记住密码的CheckBox和按钮
登录界面布局代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/bg"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:text="登录"
android:textColor="@color/white"
android:textSize="30dp" />
<ImageView
android:id="@+id/lg_userIcon"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginBottom="20dp"
android:layout_marginTop="20dp"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:src="@drawable/touxiang"/>
<EditText
android:id="@+id/lg_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/lg_userIcon"
android:layout_marginTop="30dp"
android:drawableLeft="@drawable/account"
android:drawablePadding="5dp"
android:hint="请输入账号"
android:maxLines="1"
android:textColor="#FFFF"
android:textColorHint="#FFFF" />
<EditText
android:id="@+id/lg_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/lg_username"
android:layout_marginTop="10dp"
android:drawableLeft="@drawable/password"
android:drawablePadding="5dp"
android:hint="请输入密码"
android:maxLines="1"
android:inputType="textPassword"
android:textColor="#FFFF"
android:textColorHint="#FFF"/>
<LinearLayout
android:id="@+id/ly"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/lg_password">
<CheckBox
android:id="@+id/lg_rememberPsd"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="5"
android:text="记住密码"
android:textColor="#1E90FF"/>
</LinearLayout>
<Button
android:id="@+id/lg_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/ly"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text="点击登录"
android:textSize="18sp"
android:textColor="#FFFFFF"
android:background="#009FCC"/>
</LinearLayout>
</LinearLayout>
3、编写登录kotlin代码,实现个人信息存与取
package com.example.test03
import android.app.AlertDialog
import android.content.Context
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.activity_log_on.*
class log_on : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_log_on)
var rem=getPreferences(Context.MODE_PRIVATE)
val isrember=rem.getBoolean("lg_rememberPsd",false)
if(isrember){
//将密码和账号都设到文本框里
val account=rem.getString("username","")
val password=rem.getString("psd","")
lg_username.setText(account)
lg_password.setText(password)
lg_rememberPsd.isChecked = true
}
lg_login.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
var username = lg_username.getText().toString()//账号
var psd = lg_password.getText().toString()//密码
if(username=="123"&&psd=="123"){
val editor=rem.edit()
if(lg_rememberPsd.isChecked){
//把account和password对应的值都存入SharedPreferences文件中并提交
editor.putBoolean("lg_rememberPsd",true)
editor.putString("username",username)
editor.putString("psd",psd)
}else{
//将SharedPreferences文件中的数据全部清除掉
editor.clear()
}
editor.apply()
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
finish()
}else{
val dialog = AlertDialog.Builder(this@log_on)
dialog.setTitle("提示")
dialog.setIcon(R.drawable.exit)
dialog.setMessage("账号或密码错误")
dialog.setCancelable(false)
//重新输入,清空输入框内容
dialog.setPositiveButton(
"重新输入"
) { dialog, which ->
lg_username.setText("")
lg_password.setText("")
}
dialog.setNegativeButton("取消", null)
dialog.show()
}
}
})
}
}
四、 总结
首先使用getPreferences()方法得到SharedPreferences对象之后,然后向SharedPreferences文件中存储数据。主要分为3个步骤:
(1) 调用SharedPreferences对象的edit()方法获取一个SharedPreferences.Editor对象。
(2) 向SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用
putBoolean()方法,添加一个字符串则使用putString()方法,以此类推。
(3) 调用apply()方法将添加的数据提交,从而完成数据存储操作。