Android:用SharePreferences实现记住密码功能

案例:

Android:用SharePreferences实现记住密码功能_第1张图片 Android:用SharePreferences实现记住密码功能_第2张图片


项目实现:

SharePreferences对象中提供了一系列的get方法用于对存储进行读取,每种get方法都对应了SharePreferences.Editor中的一种put方法,这些get方法都接收两个参数,第一个是键,传入存入数据时使用的键就可以得到相应的值;第二个方法参数是默认值,即表示当传入的键找不到对应的值时会以什么样的默认值返回。
   下面只给出关键代码,界面设计不再给出:
package activitytest.example.com.case_login;

import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private SharedPreferences pref;
    private SharedPreferences.Editor editor;
    private EditText accountEdit;
    private EditText passwordEdit;
    private Button login;
    private CheckBox rememberPass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pref= PreferenceManager.getDefaultSharedPreferences(this);
        accountEdit=(EditText)findViewById(R.id.account);
        passwordEdit=(EditText)findViewById(R.id.password);
        login=(Button)findViewById(R.id.login);
        rememberPass=(CheckBox)findViewById(R.id.remember_pass);
        boolean isRemenber=pref.getBoolean("remember_password",false);
        if(isRemenber){
            //将账号和密码都设置到文本中
            String account=pref.getString("account","");
            String password=pref.getString("password","");
            accountEdit.setText(account);
            passwordEdit.setText(password);
            rememberPass.setChecked(true);

        }
        login.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                String account=accountEdit.getText().toString();
                String password=passwordEdit.getText().toString();
                //如果账号是admin且密码是123456就认为登陆成功
                if(account.equals("admin")&&password.equals("123456")){
                    editor=pref.edit();
                    if(rememberPass.isChecked()){
                        editor.putBoolean("remember_password",true);
                        editor.putString("account",account);
                        editor.putString("password",password);
                    }else {
                        editor.clear();
                    }
                    editor.apply();
                    Intent intent=new Intent(MainActivity.this,SecondActivity.class);
                    startActivity(intent);
                    finish();
                }else{
                    Toast.makeText(MainActivity.this,"account or password is invalid",Toast.LENGTH_SHORT).show();
                }
            }
        });


    }
}

1、这里首先在onCreate()方法中获取了SharePreferences对象,然后调用他的getBoolean()方法获取remember_password这个键对应的值,因为一开始并不存在对应的值,所以会使用默认值false,这样就什么都不会发生。接着在登录成功后,会调用CheckBox的isChecked()方法来检查复选框是否被选中,如果选中了,则表示用户想要记住密码,这是将remember_password设置为true,然后把account和password对应的值都存入到SharePreferences文件中并提交。如果没有选中,就简单调用一下clear()方法,将SharePreferences文件中的数据全部清除。

2、当用户选中了记住密码复选框,并成功登陆过一次,remember_password键对应的值就是true了,这时候如果再重新启动登陆界面们就会从SharePreferences文件中将保存的账号和密码都读取出来,并填充到文本输入框中,然后记住密码复选框选中,这样就完成记住密码的功能了。

3、将密码以明文的形式存储在SharePreferences文件中是非常不安全的,因此正式的项目中还需要结合一定的加密算法来对密码进行保护。



































你可能感兴趣的:(Android)