利用SharedPreferences实现记住密码和自动登录

public class MainActivity extends Activity {


     private EditText et_name;

     private EditText et_pwd;

     private CheckBox cb_zd;  
     private CheckBox cb_jz;
     private SharedPreferences sp;


     @Override
     protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


et_name = (EditText) findViewById(R.id.et_name);
et_pwd = (EditText) findViewById(R.id.et_pwd);
cb_jz = (CheckBox) findViewById(R.id.cb_jz);

cb_zd = (CheckBox) findViewById(R.id.cb_zd);


        //获取SharedPreferences
        sp = getSharedPreferences("user", MODE_PRIVATE);

        //点击自动登陆复选框事件:点击自动登陆会把记住密码选项自动选中
        cb_zd.setOnClickListener(new OnClickListener() {
     @Override
     public void onClick(View v) {
        // 判断自动登陆状态:如果自动登陆为选中状态时把记住密码也选中
        // 因为自动登陆的前提是记住密码
        if(cb_zd.isChecked()==true){
        //Toast.makeText(MainActivity.this,""+cb_jz.isChecked(),0).show();
        cb_jz.setChecked(true);
        }
     }
     });

 

     //默认判断记住密码框和自动登陆框是否为选中状态
     isCheck();

     }


     //默认判断记住密码框和自动登陆框是否为选中状态
     private void isCheck() {
        //首选获取到xml中的cb_jz属性和cb_zd属性(注:第一次调用时没有此属性)设初始值为记住密码框和自动   登陆框的选中状态
        boolean b = sp.getBoolean("cb_jz", cb_jz.isChecked());
        boolean c = sp.getBoolean("cb_zd", cb_zd.isChecked());
        cb_jz.setChecked(b);//把记住密码框的选中状态给记住密码框赋值(目的:是为了让下次登陆时保持上一次         退出时记住密码框的选中状态)
        cb_zd.setChecked(c);//把自动登陆框的选中状态给自动登陆框赋值(目的:是为了让下次登陆时保持上一次         退出时自动登陆框的选中状态)
        //判断如果记住密码框为选中转态时走此判断方法否则不走(此方法是让从xml文件中获取到值并赋值 到输         入框中从而完成展示数据)
        if(b){
      String name = sp.getString("name", "");
      String pwd = sp.getString("pwd", "");
      et_name.setText(""+name);
      et_pwd.setText(""+pwd);
//因为只有在记住密码时才能进行自动登陆所以先判断记住密码是否为选中状态
if(c){
      Intent intent = new Intent(MainActivity.this, TwoActivity.class);
      startActivity(intent);
}
}else{
              String name = sp.getString("name", "");
      String pwd = sp.getString("pwd", "");
      et_name.setText(""+name);
      et_pwd.setText(""+pwd);
}

        }


      //点击登陆的点击事件(跳转到另一个页面)

         public void click(View v){
     //在跳转之前判断记住密码框或自动登陆框的选中状态
     save();
     //进行跳转
     Intent intent = new Intent(MainActivity.this, TwoActivity.class);
     //开启跳转
     startActivity(intent);
 finish();
        }

    

        //点击退出的点击事件(点击退出让自动登陆取消)
      public void exit(View v){
    //在此让用户处于可编辑状态
    Editor edit = sp.edit();
    //把xml文件中cb_zd属性的值更改为false(目的:让下次登陆时让程序无法走自动登陆代码)
    edit.putBoolean("cb_zd", false);
    //保存
    edit.commit();
    //销毁此页面  点击对出后把此页面销毁
    finish();

}


//点击记住密码
public void save(){
    //让用户处于可编辑状态
    Editor edit = sp.edit();
    //设置boolean值为记住密码框的选中状态(如果点击按钮时是选中状态会让用户名和密码展示在输入框 内)
    edit.putBoolean("cb_jz", cb_jz.isChecked());
    //用记住密码框的选中状态判断是否执行if,如果是选中状态则把输入框内的值存入到xml文件中,这样  即使应用关闭数据不会消失
if(cb_jz.isChecked()){
    String name = et_name.getText().toString();//获取到用户名输入框内的值(数据)
    String pwd = et_pwd.getText().toString();//获取到密码输入框内的值(数据)
    //然后把获取到的值以key-value的形式存入xml文件中
      edit.putString("name", name);
    edit.putString("pwd", pwd);
}
   //设置boolean值为自动登陆框的选中状态(如果点击按钮时是选中状态会让用户下一次在此点击应用时直         接登陆)
    edit.putBoolean("cb_zd", cb_zd.isChecked());
//重要!!!提交/保存数据
edit.commit();
}

}

猜你喜欢

转载自blog.csdn.net/zjc_null/article/details/78719785