1.记住密码
1.1LoginMainActivity.java
package com.example.chapter06; import android.app.Activity; import android.content.Context; 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.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.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import com.example.chapter06.util.ViewUnil; import java.util.Random; public class LoginMainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener, View.OnClickListener { private TextView tv_password; private EditText et_password; private Button btn_forget; private CheckBox ck_remember; private EditText et_phone; private RadioButton rb_verifycode; private RadioButton rb_password; private ActivityResultLauncher<Intent> register; private Button btn_login; private String mPassword = "111111"; private String mVerifyCode; private SharedPreferences preferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login_main); RadioGroup rg_login = findViewById(R.id.rg_login); tv_password = findViewById(R.id.tv_password); et_phone = findViewById(R.id.et_phone); et_password = findViewById(R.id.et_password); btn_forget = findViewById(R.id.btn_forget); ck_remember = findViewById(R.id.ck_remember); rb_password = findViewById(R.id.rb_password); rb_verifycode = findViewById(R.id.rb_verifycode); btn_login = findViewById(R.id.btn_login); // 给rg_login设置单选监听器 rg_login.setOnCheckedChangeListener(this); // 给et_phone添加文本变更监听器 et_phone.addTextChangedListener(new HideTextWatcher(et_phone, 11)); // 给et_password添加文本变更监听器 et_password.addTextChangedListener(new HideTextWatcher(et_password, 6)); btn_forget.setOnClickListener(this); btn_login.setOnClickListener(this); register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { Intent intent = result.getData(); if (intent != null && result.getResultCode() == Activity.RESULT_OK) { // 用户密码已改为新密码,故更新密码变量 mPassword = intent.getStringExtra("new_password"); } } }); preferences = getSharedPreferences("config", Context.MODE_PRIVATE); reload(); } private void reload() { boolean isRember = preferences.getBoolean("isRember", false); if (isRember) { String phone = preferences.getString("phone", ""); et_phone.setText(phone); String password = preferences.getString("password", ""); et_password.setText(password); ck_remember.setChecked(true); } } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { // 选择了密码登录 case R.id.rb_password: tv_password.setText(getString(R.string.login_password)); et_password.setHint(getString(R.string.input_password)); btn_forget.setText(getString(R.string.forget_password)); ck_remember.setVisibility(View.VISIBLE); break; // 选择了验证码登录 case R.id.rb_verifycode: tv_password.setText(getString(R.string.verifycode)); et_password.setHint(getString(R.string.input_verifycode)); btn_forget.setText(getString(R.string.get_verifycode)); ck_remember.setVisibility(View.GONE); break; } } @Override public void onClick(View v) { String phone = et_phone.getText().toString(); if (phone.length() < 11) { Toast.makeText(this, "请输入正确的手机号", Toast.LENGTH_SHORT).show(); return; } switch(v.getId()) { case R.id.btn_forget: // 选择了密码方式校验,此时要跳到找回密码页面 if (rb_password.isChecked()) { // 以下携带手机号码跳转到找回密码页面 Intent intent = new Intent(this, LoginForgetActivity.class); intent.putExtra("phone", phone); register.launch(intent); } 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 dialog = builder.create(); dialog.show(); } break; case R.id.btn_login: // 密码方式校验 if (rb_password.isChecked()) { if (!mPassword.equals(et_password.getText().toString())) { Toast.makeText(this, "请输入正确的密码", Toast.LENGTH_SHORT).show(); return; } // 提示用户登录成功 loginSuccess(); } else if (rb_verifycode.isChecked()) { // 验证码方式校验 if (!mPassword.equals(et_password.getText().toString())) { Toast.makeText(this, "请输入正确的验证码", Toast.LENGTH_SHORT).show(); return; } // 提示用户登录成功 loginSuccess(); } break; } } 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("确定返回", (dialog, which) -> { // 结束当前的活动页面 finish(); }); builder.setNegativeButton("我再看看", null); AlertDialog dialog = builder.create(); dialog.show(); if (ck_remember.isChecked()) { SharedPreferences.Editor editor = preferences.edit(); editor.putString("phone", et_phone.getText().toString()); editor.putString("password", et_password.getText().toString()); editor.putBoolean("isRember", ck_remember.isChecked()); editor.commit(); } } // 定义一个编辑框监听器,在输入文本达到指定长度时自动隐藏输入法 private class HideTextWatcher implements TextWatcher { private EditText mView; private int maxLength; public HideTextWatcher(EditText v, int maxLength) { this.mView = v; this.maxLength = maxLength; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (s.toString().length() == maxLength) { // 隐藏输入法软键盘 ViewUnil.hideOneInputMethod(LoginMainActivity.this, mView); } } } }
1.2效果:
退出应用:
重新进入APP,从SharedPreferences中读取数据:
2.SQLiteDatabase
2.1activity_database.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_database_create" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="创建数据库" android:textColor="@color/black" android:textSize="17sp" /> <Button android:id="@+id/btn_database_delete" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="删除数据库" android:textColor="@color/black" android:textSize="17sp" /> </LinearLayout> <TextView android:id="@+id/tv_database" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="5dp" android:textColor="@color/black" android:textSize="17sp" /> </LinearLayout>
2.2DatabaseActivity.java
package com.example.chapter06; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class DatabaseActivity extends AppCompatActivity implements View.OnClickListener { private TextView tv_database; private String mDatabaseName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_database); tv_database = findViewById(R.id.tv_database); findViewById(R.id.btn_database_create).setOnClickListener(this); findViewById(R.id.btn_database_delete).setOnClickListener(this); // 生成一个测试数据库的完整路径 mDatabaseName = getFilesDir() + "/test.db"; } @Override public void onClick(View v) { String desc = ""; switch (v.getId()) { case R.id.btn_database_create: // 创建或打开数据库,数据库如果不存在就创建它,如果存在就打开它 SQLiteDatabase db = openOrCreateDatabase(mDatabaseName, Context.MODE_PRIVATE, null); desc = String.format("数据库%s创建%s", db.getPath(), (db!=null)?"成功":"失败"); tv_database.setText(desc); break; case R.id.btn_database_delete: // 删除数据库 boolean result = deleteDatabase(mDatabaseName); desc = String.format("数据库%s删除%s", mDatabaseName, result?"成功":"失败"); tv_database.setText(desc); break; } } }
2.3效果:
标签:10,29,private,phone,2022,import,et,android,password From: https://www.cnblogs.com/pingfanliliang/p/16837996.html