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

r囧r小猫 2021-09-10 16:46 978阅读 0赞

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

  1. public class LoginCheckActivity extends Activity implements OnClickListener{
  2. //登录按钮
  3. private Button loginButton;
  4. //账号文本框
  5. private EditText accountEditText;
  6. //密码文本框
  7. private EditText passwordEditText;
  8. //账号
  9. private String account;
  10. //密码
  11. private String password;
  12. private String accountValue;
  13. private String passwordValue;
  14. //进度条
  15. private ProgressDialog pd = null;
  16. //记住账号的CheckBox
  17. private CheckBox savedAccountCheckBox;
  18. //自动登录的CheckBox
  19. private CheckBox autoLoginCheckBox;
  20. //SharePreferences对象,用于记住账号
  21. private SharedPreferences sp;
  22. //记住账号的标志常数
  23. private final String MAK = "innoview";
  24. @SuppressWarnings("deprecation")
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. //设置标题不显示
  29. requestWindowFeature(Window.FEATURE_NO_TITLE);
  30. setContentView(R.layout.login);
  31. //账号的文本框
  32. accountEditText = (EditText)this.findViewById(R.id.et_account);
  33. //密码的文本框
  34. passwordEditText = (EditText)this.findViewById(R.id.et_password);
  35. //保存账号的CheckBox
  36. savedAccountCheckBox = (CheckBox)findViewById(R.id.cb_savedAccount);
  37. //自动登录的CheckBox
  38. autoLoginCheckBox = (CheckBox)findViewById(R.id.cb_autoLogin);
  39. //获取保存在SharePreferences里面的账号信息,实现自动登录
  40. sp = getSharedPreferences("accountInfo",Context.MODE_WORLD_READABLE);
  41. if(sp.getBoolean("ISCHECK", false)){
  42. savedAccountCheckBox.setChecked(true);
  43. try{
  44. accountValue = sp.getString("ACCOUNTVALUE","");
  45. System.out.println("<<<<<<<<<<<<"+"账号"+accountValue);
  46. }catch (Exception e) {
  47. // TODO: handle exception
  48. }
  49. accountEditText.setText(account);
  50. try{
  51. passwordValue = sp.getString("PASSWORDVALUE","");
  52. System.out.println("<<<<<<<<<<<<"+"密码"+passwordValue);
  53. }catch (Exception e) {
  54. // TODO: handle exception
  55. }
  56. passwordEditText.setText(password);
  57. if(sp.getBoolean("AUTO_ISCHECK", false)){
  58. autoLoginCheckBox.setChecked(true);
  59. initLogin();
  60. }
  61. }
  62. savedAccountCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
  63. public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
  64. if (savedAccountCheckBox.isChecked()) {
  65. System.out.println("记住账号框未选中状态");
  66. sp.edit().putBoolean("ISCHECK", true).commit();
  67. }else {
  68. System.out.println("记住账号框未选中");
  69. sp.edit().putBoolean("ISCHECK", false).commit();
  70. }
  71. }
  72. });
  73. autoLoginCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
  74. public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
  75. if (autoLoginCheckBox.isChecked()) {
  76. System.out.println("自动登录功能以启用");
  77. sp.edit().putBoolean("AUTO_ISCHECK", true).commit();
  78. } else {
  79. System.out.println("自动登录已关闭");
  80. sp.edit().putBoolean("AUTO_ISCHECK", false).commit();
  81. }
  82. }
  83. });
  84. loginButton = (Button)findViewById(R.id.bt_login);
  85. loginButton.setOnClickListener(this);
  86. }
  87. /**
  88. * 重载的按钮点击事件
  89. */
  90. @Override
  91. public void onClick(View v) {
  92. switch (v.getId()) {
  93. case R.id.bt_login:
  94. initLogin();
  95. break;
  96. default:
  97. break;
  98. }
  99. }
  100. public void initLogin(){
  101. //显示进度条
  102. pd = new ProgressDialog(this);
  103. pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
  104. pd.setMessage("数据加载...");
  105. pd.show();
  106. account = accountEditText.getText().toString();
  107. password = passwordEditText.getText().toString();
  108. if(savedAccountCheckBox.isChecked())
  109. {
  110. Editor editor = sp.edit();
  111. try {
  112. editor.putString("ACCOUNTVALUE", account);
  113. System.out.println("<<<<<<<<"+"账号"+account);
  114. } catch (Exception e) {
  115. Toast.makeText(LoginCheckActivity.this,"账号保存异常",Toast.LENGTH_SHORT).show();
  116. e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
  117. }
  118. try {
  119. editor.putString("PASSWORDVALUE", password);
  120. System.out.println("<<<<<<<<"+"密码"+password));
  121. } catch (Exception e) {
  122. Toast.makeText(LoginCheckActivity.this,"密码保存异常",Toast.LENGTH_SHORT).show();
  123. e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
  124. }
  125. editor.commit();
  126. }
  127. loginCheck(account, password);
  128. }
  129. /**
  130. * 登录验证
  131. * @param account 账号(学号)
  132. * @param password 密码
  133. */
  134. public void loginCheck(String account, String password){
  135. if(account.equals("admin")&&password.equals("123")){
  136. Intent intent = new Intent(LoginCheckActivity.this,MainActivity.class);
  137. startActivity(intent);
  138. LoginCheckActivity.this.finish();
  139. }
  140. } }

发表评论

表情:
评论列表 (有 0 条评论,978人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js如何实现登录记住密码

    常见的很多网站登录,都有记住密码功能,下面是用js实现的记住密码功能(代码用的源生js,不用引入任何插件,大家如果引入了jQuery,可以进行修改,优化) js部分