一、前言:
在上一篇博客中完成了一个简单的登录界面和强制下线等一系列简单功能。现在,在上一篇的基础上实现记住密码的功能,
只是实现这么一个简单的功能,在实际项目中,这种方式是很不安全的。
二,分析与实现过程:
首先我们需要在登录界面放置一个复选框控件,像这样:
代码如下:
.......
<CheckBox
android:id="@+id/mCb"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住密码"
/>
......
注:1.这里代码显示好像有问题,第一行是: <CheckBox
当用户选中这个复选框后,我们需要把账号,密码,还有是否记住密码着三个数据保存到本地,启动程序的时候,程序需要去读取这个本地数据文件,首先判断用户是否选中了记住密码,如果是true就自动账号和密码到输入框。当然第一次启动程序本地肯定是没有这些数据的。代码如下:
public class LoginActivity extends BaseActivity {
private EditText mEt_phone;
private EditText mEt_password;
private Button mBt_login;
private CheckBox mCb;
private String phone;
private String password;
//定义读取和存储数据对象
private SharedPreferences.Editor editor;
private SharedPreferences pref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_login );
//getDefaultSharedPreferences方法通过获得pref对象
pref = PreferenceManager.getDefaultSharedPreferences ( this );
mBt_login = findViewById ( R.id.mBt_login );
mEt_phone = findViewById ( R.id.mEt_phone );
mEt_password = findViewById ( R.id.mEt_password );
mCb = findViewById(R.id.mCb);
//首先读取本地数据中用户是否选择了记住密码
boolean isRemember = pref.getBoolean ( "remember",false );
//如果是,就将本地数据中的账号和密码Set到输入框中
//并将记住密码复选框Set为true
if (isRemember){
String phone_save = pref.getString ( "phone","" );
String password_save = pref.getString ( "password","" );
mEt_phone.setText ( phone_save );
mEt_password.setText ( password_save );
mCb.setChecked ( true );
}
mBt_login.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View view) {
phone = mEt_phone.getText ().toString ();
password = mEt_password.getText ().toString ();
if(phone.equals ( "admin" )&&password.equals ( "123456" )){
//获得editor对象,用于将数据保存在本地
editor =pref.edit ();
//如果用户选中了记住密码复选框.....
if (mCb.isChecked ()){
editor.putBoolean ( "remember",true );
editor.putString ( "phone", mEt_phone.getText ().toString ());
editor.putString ( "password",mEt_password.getText ().toString () );
}else {
//如果没选,就将本地数据中的remember设置为false
editor.putBoolean ( "remember",false);
//或者使用下面语句直接清空本地数据
//editor.clear ();
}
editor.apply ();
Intent intent = new Intent ( LoginActivity.this,MainActivity.class );
startActivity ( intent );
finish ();
}else {
Toast.makeText ( LoginActivity.this,
"账户或者密码错误",Toast.LENGTH_SHORT).show ();
}
}
} );
}
}
代码是上一篇博客的LoginActivity,只是在它的基础上添加了一些代码,添加代码的地方我都加注释说明,代码不是很复杂。上次的上传了源文件,这次就不用了,因为相对于上篇博客中的代码改动的地方我都直接贴出来了。