本地存储登录信息

本文利用SharedPreferences存储一个登录信息。

SharedPreferences的基本用法

  1. 首先取得SharedPreference类的实例:
    有三种方法可以获得SharePreferences类的实例。
SharedPreferences pref = getSharedPreferences("filename", MODE_PRIVATE);
//这是Context类的一个方法,第一个参数data是文件名,默认是data/data/包名/shared_prefs/filename.xml
//第二个参数是操作方式,常用的有MODE_PRIVATE和MODE_MULTI_PROCESS,一般用前者,后者多进程访问的情况用。
pref = getPreferences(MODE_PRIVATE);
//这是Activity类中的一个用法,与第一个用法相似,文件名是以当前活动的类名来命名。
pref = PreferenceManager.getDefaultSharedPreferences(context);
//PreferenceManager类中的静态方法。默认的文件名是包名。
  1. 存储数据到手机。
    得到SharedPreferences的实例后,利用edit方法得到Editor的实例,就可以用键值对来存储数据到手机本地存储:
SharedPreferences pref = getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = pref.edit();
editor.putString("key", "value");
editor.putInt("num", 1000);
editor.apply();  // 提交
  1. 读取存储的数据。
    SharedPreferences的实例使用putString("key")方法可以读取存储的数据。
SharedPreferences pref = getDefaultSharedPreferences(context);
String s = pref.getString("key", "默认值");
//第二个参数是默认值
int i = pref.getInt("num", 0);

登录界面

本地存储登录信息_第1张图片
Screenshot_2016-05-24-18-13-24.png

这个界面比较简单,第一个EditText1是账号,第二个EditText2是密码,另外有一个CheckBox负责判断是否要记录登录信息。最后按钮Button负责提交登录信息,打开主活动。

实现登录信息存储到本地

这个用SharedPreferences实现,首先利用CheckBox判断是否要记录登录的账号和密码,如果要记录并且登录信息无误的话,点击Button后就把账号和密码存储到SharedPreferences的文件下。

public class LoginActivity extends BaseActivity {
    private EditText accountEdit;
    private EditText passwordEdit;
    private Button loginButton;
    private SharedPreferences pref;
    private CheckBox checkBox;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("登录");
        setContentView(R.layout.activity_login);
        //初始化各个控件
        pref=PreferenceManager.getDefaultSharedPreferences(this);
        accountEdit = (EditText)findViewById(R.id.edit_text_account);
        passwordEdit = (EditText)findViewById(R.id.edit_text_password);
        checkBox = (CheckBox)findViewById(R.id.checkbox);
        //读取存储标记check,true的话将登录信息读取
        if (pref.getBoolean("check", false)) {
            accountEdit.setText(pref.getString("account", "")); 
            passwordEdit.setText(pref.getString("password", ""));
            checkBox.setChecked(true);
        }
        loginButton = (Button)findViewById(R.id.button_login);
        //登录按钮的监听器
        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String account = accountEdit.getText().toString();
                String password = passwordEdit.getText().toString();
                //isCorrect()方法判断账号与密码是否正确
                if (isCorrect(account, password)) {
                    SharedPreferences.Editor editor = pref.edit();
                    editor.clear(); //清除之前存储的全部信息
                    if (checkBox.isChecked()) {
                        //将账号与密码存储,check是存储标记
                        editor.putString("account", account);
                        editor.putString("password", password);
                        editor.putBoolean("check", true);
                    }
                    //提交事务,启动主活动
                    editor.apply();
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                } else {
                    Toast.makeText(LoginActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show();
                    passwordEdit.setText("");
                }
            }
        });
    }

    private boolean isCorrect(String account, String password) {
        //验证账号和密码
        ......
    }

}

你可能感兴趣的:(本地存储登录信息)