android:登录界面记住密码
?(1)聲明一個(gè)共享參數(shù)對(duì)象,并在onCreate函數(shù)中調(diào)用getSharedPreferences方法獲取共享參數(shù)的實(shí)例。
(2)登錄成功時(shí),如果用戶勾選了“記住密碼”,就使用共享參數(shù)保存手機(jī)號(hào)碼與密碼。
(3)再次打開登錄頁面時(shí),App從共享參數(shù)中讀取手機(jī)號(hào)碼與密碼,并展示在界面上。
利用SharePreferences將已經(jīng)登陸成功的賬號(hào)密碼進(jìn)行數(shù)據(jù)存儲(chǔ) if (ck_remember.isChecked()){SharedPreferences.Editor edtor=remember.edit();edtor.putString("phonenum",et_phone.getText().toString());edtor.putString("password",et_password.getText().toString());edtor.commit(); } 對(duì)SharePreference中的數(shù)據(jù)進(jìn)行讀取 public void reload(){boolean isremember=remember.getBoolean("isremember",false);if(isremember){String phone=remember.getString("phonenum","");String password=remember.getString("password","");et_phone.setText(phone);et_password.setText(password);}}?// 下面是利用共享參數(shù)保存密碼的代碼 ? ?
// 如果勾選了“記住密碼”,則把手機(jī)號(hào)碼和密碼都保存到共享參數(shù)中 ? ?
if (bRemember) { ?
SharedPreferences.Editor editor = mShared.edit(); ?// 獲得編輯器的對(duì)象 ? ? ? ? editor.putString("phone", et_phone.getText().toString()); ?// 添加名叫phone的手機(jī)號(hào)碼 ? ? ? ? editor.putString("password", et_password.getText().toString()); ?// 添加名叫password的密碼 ? ? ? ? editor.commit(); ?// 提交編輯器中的修改 ? ? } ? ? // 下面是利用共享參數(shù)讀取密碼的代碼 ? ? // 從share.xml中獲取共享參數(shù)對(duì)象 ? ?
mShared = getSharedPreferences("share_login", MODE_PRIVATE); ? ?
// 獲取共享參數(shù)中保存的手機(jī)號(hào)碼 ? ?
String phone = mShared.getString("phone", ""); ? ? // 獲取共享參數(shù)中保存的密碼 ? ?
String password = mShared.getString("password", ""); ? ? et_phone.setText(phone);
?// 給手機(jī)號(hào)碼編輯框填寫上次保存的手機(jī)號(hào) ? ?
et_password.setText(password); ?// 給密碼編輯框填寫上次保存的密碼
package com.example.chapter05;import android.annotation.SuppressLint; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast;import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity;import com.example.chapter05.util.ViewUtil;import java.util.Random;@SuppressLint("DefaultLocale") public class LoginMainActivity extends AppCompatActivity implements View.OnClickListener {private RadioGroup rg_login; // 聲明一個(gè)單選組對(duì)象private RadioButton rb_password; // 聲明一個(gè)單選按鈕對(duì)象private RadioButton rb_verifycode; // 聲明一個(gè)單選按鈕對(duì)象private EditText et_phone; // 聲明一個(gè)編輯框?qū)ο髉rivate TextView tv_password; // 聲明一個(gè)文本視圖對(duì)象private EditText et_password; // 聲明一個(gè)編輯框?qū)ο髉rivate Button btn_forget; // 聲明一個(gè)按鈕控件對(duì)象private CheckBox ck_remember; // 聲明一個(gè)復(fù)選框?qū)ο髉rivate int mRequestCode = 0; // 跳轉(zhuǎn)頁面時(shí)的請(qǐng)求代碼private boolean bRemember = false; // 是否記住密碼private String mPassword = "111111"; // 默認(rèn)密碼private String mVerifyCode; // 驗(yàn)證碼private ActivityResultLauncher<Intent> register;private SharedPreferences remember;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login_main);rg_login = findViewById(R.id.rg_login);rb_password = findViewById(R.id.rb_password);rb_verifycode = findViewById(R.id.rb_verifycode);et_phone = findViewById(R.id.et_phone);tv_password = findViewById(R.id.tv_password);et_password = findViewById(R.id.et_password);btn_forget = findViewById(R.id.btn_forget);ck_remember = findViewById(R.id.ck_remember);// 給rg_login設(shè)置單選監(jiān)聽器rg_login.setOnCheckedChangeListener(new RadioListener());// 給ck_remember設(shè)置勾選監(jiān)聽器ck_remember.setOnCheckedChangeListener(new CheckListener());// 給et_phone添加文本變更監(jiān)聽器et_phone.addTextChangedListener(new HideTextWatcher(et_phone, 11));// 給et_password添加文本變更監(jiān)聽器et_password.addTextChangedListener(new HideTextWatcher(et_password, 6));btn_forget.setOnClickListener(this);findViewById(R.id.btn_login).setOnClickListener(this);register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {@Overridepublic void onActivityResult(ActivityResult result) {}});remember = getSharedPreferences("remember", MODE_PRIVATE);reload();}// 定義登錄方式的單選監(jiān)聽器private class RadioListener implements RadioGroup.OnCheckedChangeListener {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {if (checkedId == R.id.rb_password) { // 選擇了密碼登錄tv_password.setText("登錄密碼:");et_password.setHint("請(qǐng)輸入密碼");btn_forget.setText("忘記密碼");ck_remember.setVisibility(View.VISIBLE);} else if (checkedId == R.id.rb_verifycode) { // 選擇了驗(yàn)證碼登錄tv_password.setText(" 驗(yàn)證碼:");et_password.setHint("請(qǐng)輸入驗(yàn)證碼");btn_forget.setText("獲取驗(yàn)證碼");ck_remember.setVisibility(View.INVISIBLE);}}}// 定義是否記住密碼的勾選監(jiān)聽器private class CheckListener implements CompoundButton.OnCheckedChangeListener {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (buttonView.getId() == R.id.ck_remember) {bRemember = isChecked;}}}// 定義一個(gè)編輯框監(jiān)聽器,在輸入文本達(dá)到指定長(zhǎng)度時(shí)自動(dòng)隱藏輸入法private class HideTextWatcher implements TextWatcher {private EditText mView; // 聲明一個(gè)編輯框?qū)ο髉rivate int mMaxLength; // 聲明一個(gè)最大長(zhǎng)度變量public HideTextWatcher(EditText v, int maxLength) {super();mView = v;mMaxLength = maxLength;}// 在編輯框的輸入文本變化前觸發(fā)public void beforeTextChanged(CharSequence s, int start, int count, int after) {}// 在編輯框的輸入文本變化時(shí)觸發(fā)public void onTextChanged(CharSequence s, int start, int before, int count) {}// 在編輯框的輸入文本變化后觸發(fā)public void afterTextChanged(Editable s) {String str = s.toString(); // 獲得已輸入的文本字符串// 輸入文本達(dá)到11位(如手機(jī)號(hào)碼),或者達(dá)到6位(如登錄密碼)時(shí)關(guān)閉輸入法if ((str.length() == 11 && mMaxLength == 11)|| (str.length() == 6 && mMaxLength == 6)) {ViewUtil.hideOneInputMethod(LoginMainActivity.this, mView); // 隱藏輸入法軟鍵盤}}}@Overridepublic void onClick(View v) {String phone = et_phone.getText().toString();if (v.getId() == R.id.btn_forget) { // 點(diǎn)擊了“忘記密碼”按鈕if (phone.length() < 11) { // 手機(jī)號(hào)碼不足11位Toast.makeText(this, "請(qǐng)輸入正確的手機(jī)號(hào)", Toast.LENGTH_SHORT).show();return;}if (rb_password.isChecked()) { // 選擇了密碼方式校驗(yàn),此時(shí)要跳到找回密碼頁面// 以下攜帶手機(jī)號(hào)碼跳轉(zhuǎn)到找回密碼頁面Intent intent = new Intent(this, LoginForgetActivity.class);intent.putExtra("phone", phone);register.launch(intent);//startActivityForResult(intent, mRequestCode); // 攜帶意圖返回上一個(gè)頁面} else if (rb_verifycode.isChecked()) { // 選擇了驗(yàn)證碼方式校驗(yàn),此時(shí)要生成六位隨機(jī)數(shù)字驗(yàn)證碼// 生成六位隨機(jī)數(shù)字的驗(yàn)證碼mVerifyCode = String.format("%06d", new Random().nextInt(999999));// 以下彈出提醒對(duì)話框,提示用戶記住六位驗(yàn)證碼數(shù)字AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("請(qǐng)記住驗(yàn)證碼");builder.setMessage("手機(jī)號(hào)" + phone + ",本次驗(yàn)證碼是" + mVerifyCode + ",請(qǐng)輸入驗(yàn)證碼");builder.setPositiveButton("好的", null);AlertDialog alert = builder.create();alert.show(); // 顯示提醒對(duì)話框}} else if (v.getId() == R.id.btn_login) { // 點(diǎn)擊了“登錄”按鈕if (phone.length() < 11) { // 手機(jī)號(hào)碼不足11位Toast.makeText(this, "請(qǐng)輸入正確的手機(jī)號(hào)", Toast.LENGTH_SHORT).show();return;}if (rb_password.isChecked()) { // 密碼方式校驗(yàn)if (!et_password.getText().toString().equals(mPassword)) {Toast.makeText(this, "請(qǐng)輸入正確的密碼", Toast.LENGTH_SHORT).show();} else { // 密碼校驗(yàn)通過loginSuccess(); // 提示用戶登錄成功}} else if (rb_verifycode.isChecked()) { // 驗(yàn)證碼方式校驗(yàn)if (!et_password.getText().toString().equals(mVerifyCode)) {Toast.makeText(this, "請(qǐng)輸入正確的驗(yàn)證碼", Toast.LENGTH_SHORT).show();} else { // 驗(yàn)證碼校驗(yàn)通過loginSuccess(); // 提示用戶登錄成功}}}}// 從下一個(gè)頁面攜帶參數(shù)返回當(dāng)前頁面時(shí)觸發(fā)@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == mRequestCode && data != null) {// 用戶密碼已改為新密碼,故更新密碼變量mPassword = data.getStringExtra("new_password");}}// 從修改密碼頁面返回登錄頁面,要清空密碼的輸入框@Overrideprotected void onRestart() {super.onRestart();et_password.setText("");}// 校驗(yàn)通過,登錄成功private void loginSuccess() {String desc = String.format("您的手機(jī)號(hào)碼是%s,恭喜你通過登錄驗(yàn)證,點(diǎn)擊“確定”按鈕返回上個(gè)頁面",et_phone.getText().toString());// 以下彈出提醒對(duì)話框,提示用戶登錄成功AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("登錄成功");builder.setMessage(desc);builder.setPositiveButton("確定返回", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {finish(); // 結(jié)束當(dāng)前的活動(dòng)頁面}});builder.setNegativeButton("我再看看", null);AlertDialog alert = builder.create();alert.show(); // 顯示提醒對(duì)話框if (ck_remember.isChecked()){SharedPreferences.Editor edtor=remember.edit();edtor.putString("phonenum",et_phone.getText().toString());edtor.putString("password",et_password.getText().toString());edtor.putBoolean("isremember",ck_remember.isChecked());edtor.commit();}}public void reload(){boolean isremember=remember.getBoolean("isremember",false);if(isremember){String phone=remember.getString("phonenum","");String password=remember.getString("password","");et_phone.setText(phone);et_password.setText(password);}}}?
?
?
總結(jié)
以上是生活随笔為你收集整理的android:登录界面记住密码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PPT难做?花太长时间?收藏这4个网站,
- 下一篇: SPOJ 7258 SUBLEX 后缀数