运行有问题或需要源码请点赞关注收藏后评论区留言~~~
SQLite简介
SQLite是一种小巧的嵌入式数据库,使用方便,开发简单,如同mysql,oracle那样,SQLite也采用SQL语句管理数据,由于它属于轻型数据库,不涉及复杂的数据控制操作,因此App开发只用到数据定义和数据操纵两类SQL。
1:数据定义语言
它描述了怎么变更数据实体的框架结构,就SQLite而言,主要包括创建表格,删除表格,修改表结构等等操作
2:数据操纵语言
它描述了怎样处理数据实体的内部记录,表格记录的操作类型包括添加,删除,修改,查询4类
一、数据库管理器SQLiteDatabase
若要在Java代码中操纵SQLite,还需要专门的工具类,SQLiteDatabase便是Android提供的SQLite数据库管理器,开发者可以在活动页面代码调用openOrCreateDatabase方法获取数据库实例 效果如下
DatabaseActivity类
package com.example.chapter06; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; 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) { if (v.getId() == R.id.btn_database_create) { // 创建或打开数据库。数据库如果不存在就创建它,如果存在就打开它 SQLiteDatabase db = openOrCreateDatabase(mDatabaseName, Context.MODE_PRIVATE, null); String desc = String.format("数据库%s创建%s", db.getPath(), (db!=null)?"成功":"失败"); tv_database.setText(desc); } else if (v.getId() == R.id.btn_database_delete) { boolean result = deleteDatabase(mDatabaseName); // 删除数据库 String desc = String.format("数据库%s删除%s", mDatabaseName, result?"成功":"失败"); tv_database.setText(desc); } } }
activity_databaseXML文件
<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>
二、数据库帮助器SQLiteOpenHelper
由于SQLiteDatabase存在局限性,一不小心就会重复打开数据库,处理数据库的升级也不方便,因此Android提供了数据库帮助其SQLiteOpenHelper,帮助开发者合理使用SQLite
下面通过实例演示对数据库的增删改查功能以及获取用户信息 效果如下
SQLiteWriteActivity类
package com.example.chapter06; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; import com.example.chapter06.bean.UserInfo; import com.example.chapter06.database.UserDBHelper; import com.example.chapter06.util.DateUtil; import com.example.chapter06.util.ToastUtil; public class SQLiteWriteActivity extends AppCompatActivity implements View.OnClickListener, CompoundButton.OnCheckedChangeListener { private UserDBHelper mHelper; // 声明一个用户数据库帮助器的对象 private EditText et_name; private EditText et_age; private EditText et_height; private EditText et_weight; private boolean bMarried = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sqlite_write); et_name = findViewById(R.id.et_name); et_age = findViewById(R.id.et_age); et_height = findViewById(R.id.et_height); et_weight = findViewById(R.id.et_weight); CheckBox ck_married = findViewById(R.id.ck_married); ck_married.setOnCheckedChangeListener(this); findViewById(R.id.btn_save).setOnClickListener(this); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { bMarried = isChecked; } @Override protected void onStart() { super.onStart(); // 获得数据库帮助器的实例 mHelper = UserDBHelper.getInstance(this, 1); mHelper.openWriteLink(); // 打开数据库帮助器的写连接 } @Override protected void onStop() { super.onStop(); mHelper.closeLink(); // 关闭数据库连接 } @Override public void onClick(View v) { if (v.getId() == R.id.btn_save) { String name = et_name.getText().toString(); String age = et_age.getText().toString(); String height = et_height.getText().toString(); String weight = et_weight.getText().toString(); if (TextUtils.isEmpty(name)) { ToastUtil.show(this, "请先填写姓名"); return; } else if (TextUtils.isEmpty(age)) { ToastUtil.show(this, "请先填写年龄"); return; } else if (TextUtils.isEmpty(height)) { ToastUtil.show(this, "请先填写身高"); return; } else if (TextUtils.isEmpty(weight)) { ToastUtil.show(this, "请先填写体重"); return; } // 以下声明一个用户信息对象,并填写它的各字段值 UserInfo info = new UserInfo(); info.name = name; info.age = Integer.parseInt(age); info.height = Long.parseLong(height); info.weight = Float.parseFloat(weight); info.married = bMarried; info.update_time = DateUtil.getNowDateTime("yyyy-MM-dd HH:mm:ss"); mHelper.insert(info); // 执行数据库帮助器的插入操作 ToastUtil.show(this, "数据已写入SQLite数据库"); } } }
SQLiteReadActivity类
package com.example.chapter06; import android.annotation.SuppressLint; import android.os.Bundle; import android.view.View; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import com.example.chapter06.bean.UserInfo; import com.example.chapter06.database.UserDBHelper; import com.example.chapter06.util.ToastUtil; import java.util.List; @SuppressLint("DefaultLocale") public class SQLiteReadActivity extends AppCompatActivity implements View.OnClickListener { private UserDBHelper mHelper; // 声明一个用户数据库帮助器的对象 private TextView tv_sqlite; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sqlite_read); tv_sqlite = findViewById(R.id.tv_sqlite); findViewById(R.id.btn_delete).setOnClickListener(this); } @Override protected void onStart() { super.onStart(); // 获得数据库帮助器的实例 mHelper = UserDBHelper.getInstance(this, 1); mHelper.openReadLink(); // 打开数据库帮助器的读连接 readSQLite(); // 读取数据库中保存的所有用户记录 } @Override protected void onStop() { super.onStop(); mHelper.closeLink(); // 关闭数据库连接 } // 读取数据库中保存的所有用户记录 private void readSQLite() { if (mHelper == null) { ToastUtil.show(this, "数据库连接为空"); return; } // 执行数据库帮助器的查询操作 List<UserInfo> userList = mHelper.query("1=1"); String desc = String.format("数据库查询到%d条记录,详情如下:", userList.size()); for (int i = 0; i < userList.size(); i++) { UserInfo info = userList.get(i); desc = String.format("%s\n第%d条记录信息如下:", desc, i + 1); desc = String.format("%s\n 姓名为%s", desc, info.name); desc = String.format("%s\n 年龄为%d", desc, info.age); desc = String.format("%s\n 身高为%d", desc, info.height); desc = String.format("%s\n 体重为%f", desc, info.weight); desc = String.format("%s\n 婚否为%b", desc, info.married); desc = String.format("%s\n 更新时间为%s", desc, info.update_time); } if (userList.size() <= 0) { desc = "数据库查询到的记录为空"; } tv_sqlite.setText(desc); } @Override public void onClick(View v) { if (v.getId() == R.id.btn_delete) { mHelper.closeLink(); // 关闭数据库连接 mHelper.openWriteLink(); // 打开数据库帮助器的写连接 mHelper.deleteAll(); // 删除所有记录 mHelper.closeLink(); // 关闭数据库连接 mHelper.openReadLink(); // 打开数据库帮助器的读连接 readSQLite(); // 读取数据库中保存的所有用户记录 ToastUtil.show(this, "已删除所有记录"); } } }
activity_sqlite_writeXML文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="5dp" > <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp" > <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center" android:text="姓名:" android:textColor="@color/black" android:textSize="17sp" /> <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="3dp" android:layout_marginTop="3dp" android:layout_toRightOf="@+id/tv_name" android:background="@drawable/editext_selector" android:gravity="left|center" android:hint="请输入姓名" android:inputType="text" android:maxLength="12" android:textColor="@color/black" android:textSize="17sp" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp" > <TextView android:id="@+id/tv_age" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center" android:text="年龄:" android:textColor="@color/black" android:textSize="17sp" /> <EditText android:id="@+id/et_age" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="3dp" android:layout_marginTop="3dp" android:layout_toRightOf="@+id/tv_age" android:background="@drawable/editext_selector" android:gravity="left|center" android:hint="请输入年龄" android:inputType="number" android:maxLength="2" android:textColor="@color/black" android:textSize="17sp" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp" > <TextView android:id="@+id/tv_height" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center" android:text="身高:" android:textColor="@color/black" android:textSize="17sp" /> <EditText android:id="@+id/et_height" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="3dp" android:layout_marginTop="3dp" android:layout_toRightOf="@+id/tv_height" android:background="@drawable/editext_selector" android:gravity="left|center" android:hint="请输入身高" android:inputType="number" android:maxLength="3" android:textColor="@color/black" android:textSize="17sp" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp" > <TextView android:id="@+id/tv_weight" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center" android:text="体重:" android:textColor="@color/black" android:textSize="17sp" /> <EditText android:id="@+id/et_weight" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="3dp" android:layout_marginTop="3dp" android:layout_toRightOf="@+id/tv_weight" android:background="@drawable/editext_selector" android:gravity="left|center" android:hint="请输入体重" android:inputType="numberDecimal" android:maxLength="5" android:textColor="@color/black" android:textSize="17sp" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp" > <CheckBox android:id="@+id/ck_married" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center" android:checked="false" android:text="已婚" android:textColor="@color/black" android:textSize="17sp" /> </RelativeLayout> <Button android:id="@+id/btn_save" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="保存到数据库" android:textColor="@color/black" android:textSize="17sp" /> </LinearLayout>
activity_sqlite_readXML文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/btn_delete" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="删除所有记录" android:textColor="@color/black" android:textSize="17sp" /> <TextView android:id="@+id/tv_sqlite" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="5dp" android:textColor="@color/black" android:textSize="17sp" /> </LinearLayout>
三、优化记住密码功能
真正的记住密码功能应该是先输入手机号码,然后根据手机号码匹配保存的密码,一个手机号码对应一个密码,并支持根据手机号查找登录信息,从而同时记住多个手机号的密码 这是通过SQLite数据库可以实现这一点 后台保存密码和手机号 效果如下
LoginSQLiteActivity类
package com.example.chapter06; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.view.View.OnFocusChangeListener; 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.appcompat.app.AppCompatActivity; import com.example.chapter06.bean.UserInfo; import com.example.chapter06.database.UserDBHelper; import com.example.chapter06.util.DateUtil; import com.example.chapter06.util.ViewUtil; import java.util.Random; @SuppressLint("DefaultLocale") public class LoginSQLiteActivity extends AppCompatActivity implements View.OnClickListener, OnFocusChangeListener { 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 UserDBHelper mHelper; // 声明一个用户数据库的帮助器对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login_sqlite); 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); // 给密码编辑框注册一个焦点变化监听器,一旦焦点发生变化,就触发监听器的onFocusChange方法 et_password.setOnFocusChangeListener(this); } // 定义登录方式的单选监听器 private class RadioListener implements RadioGroup.OnCheckedChangeListener { @Override public 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 { @Override public 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(LoginSQLiteActivity.this, mView); // 隐藏输入法软键盘 } } } @Override public 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); 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(); // 提示用户登录成功 } } } } // 从下一个页面携带参数返回当前页面时触发 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == mRequestCode && data != null) { // 用户密码已改为新密码,故更新密码变量 mPassword = data.getStringExtra("new_password"); } } // 从修改密码页面返回登录页面,要清空密码的输入框 @Override protected void onRestart() { super.onRestart(); et_password.setText(""); } @Override protected void onResume() { super.onResume(); mHelper = UserDBHelper.getInstance(this, 1); // 获得用户数据库帮助器的实例 mHelper.openWriteLink(); // 恢复页面,则打开数据库连接 } @Override protected void onPause() { super.onPause(); mHelper.closeLink(); // 暂停页面,则关闭数据库连接 } // 校验通过,登录成功 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() { @Override public void onClick(DialogInterface dialog, int which) { finish(); // 结束当前的活动页面 } }); builder.setNegativeButton("我再看看", null); AlertDialog alert = builder.create(); alert.show(); // 如果勾选了“记住密码”,则把手机号码和密码保存为数据库的用户表记录 if (bRemember) { UserInfo info = new UserInfo(); // 创建一个用户信息对象 info.phone = et_phone.getText().toString(); info.password = et_password.getText().toString(); info.update_time = DateUtil.getNowDateTime("yyyy-MM-dd HH:mm:ss"); mHelper.insert(info); // 往用户数据库添加登录成功的用户信息 } } // 焦点变更事件的处理方法,hasFocus表示当前控件是否获得焦点。 // 为什么光标进入密码框事件不选onClick?因为要点两下才会触发onClick动作(第一下是切换焦点动作) @Override public void onFocusChange(View v, boolean hasFocus) { String phone = et_phone.getText().toString(); // 判断是否是密码编辑框发生焦点变化 if (v.getId() == R.id.et_password) { // 用户已输入手机号码,且密码框获得焦点 if (phone.length() > 0 && hasFocus) { // 根据手机号码到数据库中查询用户记录 UserInfo info = mHelper.queryByPhone(phone); if (info != null) { // 找到用户记录,则自动在密码框中填写该用户的密码 et_password.setText(info.password); } } } } }
LoginForgetActivity类
package com.example.chapter06; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import java.util.Random; @SuppressLint("DefaultLocale") public class LoginForgetActivity extends AppCompatActivity implements View.OnClickListener { private EditText et_password_first; // 声明一个编辑框对象 private EditText et_password_second; // 声明一个编辑框对象 private EditText et_verifycode; // 声明一个编辑框对象 private String mVerifyCode; // 验证码 private String mPhone; // 手机号码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login_forget); // 从布局文件中获取名叫et_password_first的编辑框 et_password_first = findViewById(R.id.et_password_first); // 从布局文件中获取名叫et_password_second的编辑框 et_password_second = findViewById(R.id.et_password_second); // 从布局文件中获取名叫et_verifycode的编辑框 et_verifycode = findViewById(R.id.et_verifycode); findViewById(R.id.btn_verifycode).setOnClickListener(this); findViewById(R.id.btn_confirm).setOnClickListener(this); // 从上一个页面获取要修改密码的手机号码 mPhone = getIntent().getStringExtra("phone"); } @Override public void onClick(View v) { if (v.getId() == R.id.btn_verifycode) { // 点击了“获取验证码”按钮 if (mPhone == null || mPhone.length() < 11) { Toast.makeText(this, "请输入正确的手机号", Toast.LENGTH_SHORT).show(); return; } // 生成六位随机数字的验证码 mVerifyCode = String.format("%06d", new Random().nextInt(999999)); // 以下弹出提醒对话框,提示用户记住六位验证码数字 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("请记住验证码"); builder.setMessage("手机号" + mPhone + ",本次验证码是" + mVerifyCode + ",请输入验证码"); builder.setPositiveButton("好的", null); AlertDialog alert = builder.create(); alert.show(); // 显示提醒对话框 } else if (v.getId() == R.id.btn_confirm) { // 点击了“确定”按钮 String password_first = et_password_first.getText().toString(); String password_second = et_password_second.getText().toString(); if (password_first.length() < 6 || password_second.length() < 6) { Toast.makeText(this, "请输入正确的新密码", Toast.LENGTH_SHORT).show(); return; } if (!password_first.equals(password_second)) { Toast.makeText(this, "两次输入的新密码不一致", Toast.LENGTH_SHORT).show(); return; } if (!et_verifycode.getText().toString().equals(mVerifyCode)) { Toast.makeText(this, "请输入正确的验证码", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "密码修改成功", Toast.LENGTH_SHORT).show(); // 以下把修改好的新密码返回给上一个页面 Intent intent = new Intent(); // 创建一个新意图 intent.putExtra("new_password", password_first); // 存入新密码 setResult(Activity.RESULT_OK, intent); // 携带意图返回上一个页面 finish(); // 结束当前的活动页面 } } } }
部分代码与XML文件省略...
创作不易 觉得有帮助请点赞关注收藏