专栏首页Nicky's blogAndroid实现自动登录和记住密码

Android实现自动登录和记住密码

记住密码和自动登录是很多手机软件都有的一个功能。可以用 SharedPreferences类来轻松实现。 SharedPreferences是安卓平台的一个轻量级类。采用 SharedPreferences进行数据存储是很方便的。

public class LoginCheckActivity extends Activity implements OnClickListener{
	//登录按钮
	private Button loginButton;
	
	//账号文本框
	private EditText accountEditText;
	//密码文本框
	private EditText passwordEditText;
	
	//账号
	private String account;
	//密码
	private String password;
	
	private String accountValue;
	private String passwordValue;
		
	//进度条
	private ProgressDialog pd = null;
	
	//记住账号的CheckBox
	private CheckBox savedAccountCheckBox;
	//自动登录的CheckBox
	private CheckBox autoLoginCheckBox;
	
	//SharePreferences对象,用于记住账号
	private SharedPreferences sp;
	
	//记住账号的标志常数
	private final String MAK = "innoview";
	
	
	@SuppressWarnings("deprecation")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//设置标题不显示
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.login);
		
		//账号的文本框
		accountEditText = (EditText)this.findViewById(R.id.et_account);
		//密码的文本框
		passwordEditText = (EditText)this.findViewById(R.id.et_password);
		//保存账号的CheckBox
		savedAccountCheckBox = (CheckBox)findViewById(R.id.cb_savedAccount);
		//自动登录的CheckBox
		autoLoginCheckBox = (CheckBox)findViewById(R.id.cb_autoLogin);
		//获取保存在SharePreferences里面的账号信息,实现自动登录
		sp = getSharedPreferences("accountInfo",Context.MODE_WORLD_READABLE);
		
		if(sp.getBoolean("ISCHECK", false)){
			
			savedAccountCheckBox.setChecked(true);
			
			try{
				 accountValue = sp.getString("ACCOUNTVALUE","");
				 System.out.println("<<<<<<<<<<<<"+"账号"+accountValue);
			}catch (Exception e) {
				// TODO: handle exception
			}
			
			accountEditText.setText(account);
			
			try{
				 passwordValue = sp.getString("PASSWORDVALUE","");
				 System.out.println("<<<<<<<<<<<<"+"密码"+passwordValue);
            
			}catch (Exception e) {
				// TODO: handle exception
			}
			
			passwordEditText.setText(password);
			
			if(sp.getBoolean("AUTO_ISCHECK", false)){
				 autoLoginCheckBox.setChecked(true);
				 initLogin();
		    }
			
		}
		
		savedAccountCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
			if (savedAccountCheckBox.isChecked()) {
			                     
				System.out.println("记住账号框未选中状态");
				sp.edit().putBoolean("ISCHECK", true).commit();

			}else {

				System.out.println("记住账号框未选中");
				sp.edit().putBoolean("ISCHECK", false).commit();

			}

			}
		});
		
		autoLoginCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
	        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
	        	if (autoLoginCheckBox.isChecked()) {
	        		System.out.println("自动登录功能以启用");
	        		sp.edit().putBoolean("AUTO_ISCHECK", true).commit();

	        	} else {
	        		System.out.println("自动登录已关闭");
	        		sp.edit().putBoolean("AUTO_ISCHECK", false).commit();
	        	}
	        }
		});
		
		
		loginButton = (Button)findViewById(R.id.bt_login);
		loginButton.setOnClickListener(this);
		
	}
	
	/**
	 * 重载的按钮点击事件
	 */
	@Override
	public void onClick(View v) {

		switch (v.getId()) {
		case R.id.bt_login:
			initLogin();
			break;
		default:
			break;
		}
	}   
	
	public void initLogin(){
		//显示进度条
		pd = new ProgressDialog(this);
		pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		pd.setMessage("数据加载...");
		pd.show();
		
		account = accountEditText.getText().toString();
		password = passwordEditText.getText().toString();
		
		if(savedAccountCheckBox.isChecked())
		{
		 
		 Editor editor = sp.edit();

		    try {
	            editor.putString("ACCOUNTVALUE", account);
		        System.out.println("<<<<<<<<"+"账号"+account);
		    } catch (Exception e) {
		        Toast.makeText(LoginCheckActivity.this,"账号保存异常",Toast.LENGTH_SHORT).show();
		        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
		    }
		    
		    try {
	                 editor.putString("PASSWORDVALUE", password);
		        System.out.println("<<<<<<<<"+"密码"+password));
		    } catch (Exception e) {
		        Toast.makeText(LoginCheckActivity.this,"密码保存异常",Toast.LENGTH_SHORT).show();
		        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
		    }
		    
		   editor.commit();
		}

		
		loginCheck(account, password);
	}
	
	
	/**
	 * 登录验证
	 * @param account 账号(学号)
	 * @param password 密码
	 */
	public void loginCheck(String account, String password){
		
		if(account.equals("admin")&&password.equals("123")){
			Intent intent = new Intent(LoginCheckActivity.this,MainActivity.class);
			startActivity(intent);
			LoginCheckActivity.this.finish();
		}

	}                                                                                                                         }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用JWT技术解决IM系统Socket长连接的身份认证痛点1、引言2、原作者3、系列文章5、完全搞懂什么是JWT技术6、我们是怎样使用JWT技术的?7、JWT技术的缺点8、点评附录:更多即时通讯方面的文

    本文引用了封宇《JWT技术解决IM系统的认证痛点》一文的部分内容,即时通讯网重新整理、增补和修订,感谢原作者的无私分享。

    JackJiang
  • LitePal操作数据库

    Dream城堡
  • 安卓开发基础教程-Android多界面应用程序开发

    本套教程主要讲解安卓开发的相关知识,从基础到精通。一方面可以巩固自己所得,另一方面可以帮助对安卓开发感兴趣的朋友。

    做全栈攻城狮
  • 程序员带你学习安卓开发系列-Android文件存储

    输入帐号密码,并勾选记住帐号 ,点击登录时,保存帐号信息。下次登陆可以直接显示上次保存的QQ帐号。

    做全栈攻城狮
  • Android6.0到9.0的适配爬坑总结

      大家还记得Android 6.0权限适配的泪水吗?而现在谷歌已经出了Android P的稳定版,而且谷歌粑粑,为了大家能给辛苦熬夜加班,特地的和个大市场合作...

    用户1269200
  • 运行时权限

    我们在夸数据共享的时候,遇到危险的权限时候系统会让我们进行是否授权,只有我们授权了才能使用这些权限.比如拨号(可能引起收费的敏感权限)等,这里我们来演示一下调用...

    Dream城堡
  • 窃听风云:扒掉你的最后一条“胖次”

    “每个人的手机都是一部窃听器,不管你开不开机,都能被窃听。”在2009年上映的《窃听风云》中吴彦祖饰演的人物有这样一句台词,随着影片热映,“手机窃听”的问题被更...

    FB客服
  • 在Android上用AI识别物体

    AI其中一个很重要的应用就是物体识别。 今天我们来看看如何在Android上实现这个功能。

    PhoenixZheng
  • Android adb无线调试脚本

    使用adb的无线调试功能十分的方便。 但是实际工作中,总是要手动输入,十分麻烦。所以就把它写成脚本文件。

    deep_sadness
  • 手把手带你快速上手调试Flutter项目

    在讲解调试工具之前,先来看看有关的设置选项,点击菜单栏File-->Settings-->Languages & Frameworks --> Flutter,...

    AWeiLoveAndroid

扫码关注云+社区

领取腾讯云代金券