android:登录界面记住密码
?(1)聲明一個共享參數對象,并在onCreate函數中調用getSharedPreferences方法獲取共享參數的實例。
(2)登錄成功時,如果用戶勾選了“記住密碼”,就使用共享參數保存手機號碼與密碼。
(3)再次打開登錄頁面時,App從共享參數中讀取手機號碼與密碼,并展示在界面上。
利用SharePreferences將已經登陸成功的賬號密碼進行數據存儲 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(); } 對SharePreference中的數據進行讀取 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);}}?// 下面是利用共享參數保存密碼的代碼 ? ?
// 如果勾選了“記住密碼”,則把手機號碼和密碼都保存到共享參數中 ? ?
if (bRemember) { ?
SharedPreferences.Editor editor = mShared.edit(); ?// 獲得編輯器的對象 ? ? ? ? editor.putString("phone", et_phone.getText().toString()); ?// 添加名叫phone的手機號碼 ? ? ? ? editor.putString("password", et_password.getText().toString()); ?// 添加名叫password的密碼 ? ? ? ? editor.commit(); ?// 提交編輯器中的修改 ? ? } ? ? // 下面是利用共享參數讀取密碼的代碼 ? ? // 從share.xml中獲取共享參數對象 ? ?
mShared = getSharedPreferences("share_login", MODE_PRIVATE); ? ?
// 獲取共享參數中保存的手機號碼 ? ?
String phone = mShared.getString("phone", ""); ? ? // 獲取共享參數中保存的密碼 ? ?
String password = mShared.getString("password", ""); ? ? et_phone.setText(phone);
?// 給手機號碼編輯框填寫上次保存的手機號 ? ?
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; // 聲明一個單選組對象private RadioButton rb_password; // 聲明一個單選按鈕對象private RadioButton rb_verifycode; // 聲明一個單選按鈕對象private EditText et_phone; // 聲明一個編輯框對象private TextView tv_password; // 聲明一個文本視圖對象private EditText et_password; // 聲明一個編輯框對象private Button btn_forget; // 聲明一個按鈕控件對象private CheckBox ck_remember; // 聲明一個復選框對象private int mRequestCode = 0; // 跳轉頁面時的請求代碼private boolean bRemember = false; // 是否記住密碼private String mPassword = "111111"; // 默認密碼private String mVerifyCode; // 驗證碼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設置單選監聽器rg_login.setOnCheckedChangeListener(new RadioListener());// 給ck_remember設置勾選監聽器ck_remember.setOnCheckedChangeListener(new CheckListener());// 給et_phone添加文本變更監聽器et_phone.addTextChangedListener(new HideTextWatcher(et_phone, 11));// 給et_password添加文本變更監聽器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();}// 定義登錄方式的單選監聽器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("請輸入密碼");btn_forget.setText("忘記密碼");ck_remember.setVisibility(View.VISIBLE);} else if (checkedId == R.id.rb_verifycode) { // 選擇了驗證碼登錄tv_password.setText(" 驗證碼:");et_password.setHint("請輸入驗證碼");btn_forget.setText("獲取驗證碼");ck_remember.setVisibility(View.INVISIBLE);}}}// 定義是否記住密碼的勾選監聽器private class CheckListener implements CompoundButton.OnCheckedChangeListener {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (buttonView.getId() == R.id.ck_remember) {bRemember = isChecked;}}}// 定義一個編輯框監聽器,在輸入文本達到指定長度時自動隱藏輸入法private class HideTextWatcher implements TextWatcher {private EditText mView; // 聲明一個編輯框對象private int mMaxLength; // 聲明一個最大長度變量public HideTextWatcher(EditText v, int maxLength) {super();mView = v;mMaxLength = maxLength;}// 在編輯框的輸入文本變化前觸發public void beforeTextChanged(CharSequence s, int start, int count, int after) {}// 在編輯框的輸入文本變化時觸發public void onTextChanged(CharSequence s, int start, int before, int count) {}// 在編輯框的輸入文本變化后觸發public void afterTextChanged(Editable s) {String str = s.toString(); // 獲得已輸入的文本字符串// 輸入文本達到11位(如手機號碼),或者達到6位(如登錄密碼)時關閉輸入法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) { // 點擊了“忘記密碼”按鈕if (phone.length() < 11) { // 手機號碼不足11位Toast.makeText(this, "請輸入正確的手機號", Toast.LENGTH_SHORT).show();return;}if (rb_password.isChecked()) { // 選擇了密碼方式校驗,此時要跳到找回密碼頁面// 以下攜帶手機號碼跳轉到找回密碼頁面Intent intent = new Intent(this, LoginForgetActivity.class);intent.putExtra("phone", phone);register.launch(intent);//startActivityForResult(intent, mRequestCode); // 攜帶意圖返回上一個頁面} else if (rb_verifycode.isChecked()) { // 選擇了驗證碼方式校驗,此時要生成六位隨機數字驗證碼// 生成六位隨機數字的驗證碼mVerifyCode = String.format("%06d", new Random().nextInt(999999));// 以下彈出提醒對話框,提示用戶記住六位驗證碼數字AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("請記住驗證碼");builder.setMessage("手機號" + phone + ",本次驗證碼是" + mVerifyCode + ",請輸入驗證碼");builder.setPositiveButton("好的", null);AlertDialog alert = builder.create();alert.show(); // 顯示提醒對話框}} else if (v.getId() == R.id.btn_login) { // 點擊了“登錄”按鈕if (phone.length() < 11) { // 手機號碼不足11位Toast.makeText(this, "請輸入正確的手機號", Toast.LENGTH_SHORT).show();return;}if (rb_password.isChecked()) { // 密碼方式校驗if (!et_password.getText().toString().equals(mPassword)) {Toast.makeText(this, "請輸入正確的密碼", Toast.LENGTH_SHORT).show();} else { // 密碼校驗通過loginSuccess(); // 提示用戶登錄成功}} else if (rb_verifycode.isChecked()) { // 驗證碼方式校驗if (!et_password.getText().toString().equals(mVerifyCode)) {Toast.makeText(this, "請輸入正確的驗證碼", Toast.LENGTH_SHORT).show();} else { // 驗證碼校驗通過loginSuccess(); // 提示用戶登錄成功}}}}// 從下一個頁面攜帶參數返回當前頁面時觸發@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("");}// 校驗通過,登錄成功private void loginSuccess() {String desc = String.format("您的手機號碼是%s,恭喜你通過登錄驗證,點擊“確定”按鈕返回上個頁面",et_phone.getText().toString());// 以下彈出提醒對話框,提示用戶登錄成功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(); // 結束當前的活動頁面}});builder.setNegativeButton("我再看看", null);AlertDialog alert = builder.create();alert.show(); // 顯示提醒對話框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);}}}?
?
?
總結
以上是生活随笔為你收集整理的android:登录界面记住密码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PPT难做?花太长时间?收藏这4个网站,
- 下一篇: SPOJ 7258 SUBLEX 后缀数