Android——SharedPreferences实现登录界面的记住密码和自动登录功能
16lz
2021-01-26
一、项目开发
1、项目运行效果图
2、开发概要
主要功能SharedPreferences介绍,其是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出。
SharedPreferences数据的四种操作模式- Context.MODE_PRIVATE
- Context.MODE_APPEND
- Context.MODE_WORLD_READABLE
- Context.MODE_WORLD_WRITEABLE
二、开发Android-SharedPreferences程序讲解
1、项目文件如下:
2、项目开发步骤
1、新建一个项目名字为aminiTitter,在布局文件activity_main.xml中设置文件布局,主要代码如下:
//用户名 //密码 //登录事件 //多选框布局 //记住密码 //自动登录
文本文件string.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?> aminiTwitter Settings Hello world! 账号: Email或手机号 密码: 登陆 没有账号?注册 记住密码 自动登录 登录成功! 点击返回 MainActivity
注意: 册上可以写连接的地址。
布局文件background_login_div_bg.xml和background_login.xml文件代码部分如下:
background_login_div_bg.xml:
<?xml version="1.0" encoding="utf-8"?>
background_login.xml:
<?xml version="1.0" encoding="utf-8"?>
2、重点来啦,主要代码在MainActivity.xml文件中,那么代码部分如下:
package cn.edu.bzu.aminitwitter;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private CheckBox cbJiYi;private CheckBox cbZiDongDengLu;private EditText etName,etPassword;private SharedPreferences sharedPreferences; private Button btnClick; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); findById(); //设置默认记住密码的状态 if(sharedPreferences.getBoolean("cbJiYi", true)){ cbJiYi.setChecked(true); etName.setText(sharedPreferences.getString("etName", "")); etPassword.setText(sharedPreferences.getString("etPassword", "")); } //判断自动登陆多选框的状态 if(sharedPreferences.getBoolean("cbcbZiDongDengLu", false)){ //设置默认自动登陆的状态 cbZiDongDengLu.setChecked(true); //跳转界面 Intent intent = new Intent(MainActivity.this,ShowActivity.class); startActivity(intent); } //监听自动登陆多选框事件 cbZiDongDengLu.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub if(cbZiDongDengLu.isChecked()){ //勾选事件 cbJiYi.setChecked(true); sharedPreferences.edit().putBoolean("cbZiDongDengLu", true).commit(); }else{ sharedPreferences.edit().putBoolean("cbZiDongDengLu", false).commit(); } } }); } private void findById() {// TODO Auto-generated method stub cbJiYi=(CheckBox) findViewById(R.id.cbJiYi); cbZiDongDengLu=(CheckBox) findViewById(R.id.cbZiDongDengLu); etName=(EditText) findViewById(R.id.etName); etPassword=(EditText) findViewById(R.id.etPassword); btnClick=(Button) findViewById(R.id.btnName); //创建shareaPreferences对象用来存、取数据,文件名userInfo; sharedPreferences=this.getSharedPreferences("userInfo", Context.MODE_PRIVATE);}@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true;} public void btnClick(View view){ if(etName.getText().toString().equals("abc") && etPassword.getText().toString().equals("aaa")){ //如果选中记住密码 if(cbJiYi.isChecked()){// sharedPreferences.edit().putBoolean("ISCHECK", true).commit(); //存入 Editor editor=sharedPreferences.edit(); editor.putString("etName", etName.getText().toString()); editor.putString("etPassword", etPassword.getText().toString()); editor.commit(); //取出 String etName=sharedPreferences.getString("etName", ""); String etPassword=sharedPreferences.getString("etPassword", ""); Log.d("MainActivity", "etName="+etName+"\netPassword="+etPassword+"\n"); Toast.makeText(MainActivity.this, "记住用户名和密码", Toast.LENGTH_LONG).show(); }else { //如果没选中记住密码 Toast.makeText(this, "没有记住用户名和密码", Toast.LENGTH_LONG).show(); etName.setText(""); etPassword.setText("");// sharedPreferences.edit().putBoolean("ISCHECK", false).commit(); } Intent intent=new Intent(MainActivity.this, ShowActivity.class); startActivity(intent); //finish(); if(cbJiYi.isChecked() && cbZiDongDengLu.isChecked()){ startActivity(intent); //finish(); } }else{ Toast.makeText(MainActivity.this, "登录失败!", Toast.LENGTH_LONG).show(); } }}
主要是数据的存入和取出利用,设置多选框的默认状态的记住密码、自动登录的监听事件,默认状态是记住密码,不自动登录,在btnClick实践中判断etName、etPasswprd是否为空,然后再确定执行语句,验证密码后在确定是否执行跳转,跳转到activity_show.xml中。
3、新建另一个简单的xml文件,activity_show.xml代码如下:
//返回
4、修改ShowActivity.java文件,代码部分如下:
package cn.edu.bzu.aminitwitter;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;public class ShowActivity extends Activity {private Button btnBack;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//去除标题 this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_show);btnBack=(Button) findViewById(R.id.btnBack);btnBack.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {// TODO Auto-generated method stub//返回finish();}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.show, menu);return true;}}
第二种简单方式:
public class LoginActivity extends Activity {private EditText etUser,etPassword;//定义用户名和密码private CheckBox cbRemember;//定义记住密码private Button btnLogin;//登录按钮private SharedPreferences mSpSettings=null;//声明一个sharedPreferences用于保存数据private static final String PREPS_NAME="NamePwd";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);setTitle("登录界面");findById();//获取控件setListener();//绑定事件getData();}private void setListener() {btnLogin.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {if(etUser.getText().toString().equals("zsh")&&etPassword.getText().toString().equals("123")){//判断是否记住密码,复选框是否选中if(cbRemember.isChecked()){mSpSettings=getSharedPreferences(PREPS_NAME, MODE_PRIVATE);Editor edit=mSpSettings.edit();//得到Editor对象edit.putBoolean("isKeep", true);//记录保存标记edit.putString("username", etUser.getText().toString());//记录用户名edit.putString("password", etPassword.getText().toString());//记录密码edit.commit();//**提交}else {mSpSettings=getSharedPreferences(PREPS_NAME, MODE_PRIVATE);Editor edit=mSpSettings.edit();edit.putBoolean("isKeep", true);//保存的文件名isKeepedit.putString("username", "");edit.putString("password", "");edit.commit();}//跳转Intent intent=new Intent(LoginActivity.this, LoginShowActivity.class);startActivity(intent);}else{Toast.makeText(LoginActivity.this, "密码或者用户名错误", Toast.LENGTH_SHORT).show();}}});}@Overrideprotected void onResume() {super.onResume();getData();//在界面显示数据之前得到之前存储的数据}private void getData() {mSpSettings=getSharedPreferences(PREPS_NAME, MODE_PRIVATE);if(mSpSettings.getBoolean("isKeep", false)){//如果之前存储过,则显示在相应文本框内etUser.setText(mSpSettings.getString("username", ""));etPassword.setText(mSpSettings.getString("password", ""));}else{//否则显示为空etUser.setText("");etPassword.setText("");}}private void findById() {etUser=(EditText) findViewById(R.id.etUser);etPassword=(EditText) findViewById(R.id.etPassword);cbRemember=(CheckBox) findViewById(R.id.cbRemember);btnLogin=(Button) findViewById(R.id.btnLogin);}}
5、在调试过程中注意多给Android系统加大点缓存,有利于程序的调试。这个程序其实不太成熟,比如有写代码部分没有得到有力的简化。有不好的地方希望亲抽出时间发送消息哦,在下定感激不尽!
更多相关文章
- 下载 Android(安卓)源代码 (2011-09-24 00:17)
- Android学习笔记之文件的保存与读取
- Android开发学习之路--Android(安卓)Studio cmake编译ffmpeg
- 安装android SDK和导入项目容易遇到的ERROR
- Android(安卓)XML文件使用
- react native 运行报错:Error: Command failed: gradlew.bat inst
- Android开发资源文件用法小结
- android 6.0 logcat机制(二)logcat从logd中获取log保存到文件中
- 浅析Android下的Android.mk文件(三)