写在前面:
本文实现了登录注册页面的开发,创建了本地数据库,存储注册的账户密码。注册账户为手机号,对账户为手机号进行了正则化验证。登录成功跳转至主页面。
20221028-实现登录注册功能
首先说一下,项目部署是在原有项目新建两个activity(项目右键–new–activity–empty activity):LoginActivity(登录页面布局文件.xml文件和登录.java文件)和RegisterActivity(注册页面布局文件.XML和注册.java文件)两个活动,并新建DBOpenHelper.java(main文件夹右键–new–.java)类(这个类是封装数据库的类)。
新建数据库,用来存储注册的用户名和密码
package com.domain.mainView; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBOpenHelper extends SQLiteOpenHelper { //定义创建用户数据表的SQL语句 主键user数据库表 username和password字段 final String CREATE_USER_SQL= "create table user(_id integer primary " + "key autoincrement , username, password)"; public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){ super(context,name,null,version); } @Override //数据库第一次创建时被调用 public void onCreate(SQLiteDatabase db){ //创建用户列表 execSQL执行修改数据库内容的SQL语句 db.execSQL(CREATE_USER_SQL); } @Override //版本号发生改变时使用 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //提示版本更新 System.out.println("---版本更新----"+oldVersion+"--->"+newVersion); } }
package com.domain.mainView; import androidx.appcompat.app.AppCompatActivity; import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegisterActivity extends AppCompatActivity { public static final int RESULT_CODE_REGISTER=0; private Button btn_register; private EditText et_register_username,et_register_password,et_again_password; /*数据库成员变量*/ private DBOpenHelper dbOpenHelper; String et_name; String et_password; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); //注册按钮 btn_register=(Button) findViewById(R.id.btn_register); //用户名编辑框 et_register_username= findViewById(R.id.et_register_username); //密码编辑框 et_register_password=findViewById(R.id.et_register_password); //再次输入密码编辑框 et_again_password=findViewById(R.id.et_again_password); /*实例化数据库变量dbOpenHelper*/ dbOpenHelper=new DBOpenHelper(RegisterActivity.this,"user.db",null,1); btn_register.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //获取三个编辑框的内容 String et_name=et_register_username.getText().toString(); String et_password=et_register_password.getText().toString(); String et_confirm=et_again_password.getText().toString(); //判断异常情况弹窗 //编辑框为空 if(TextUtils.isEmpty(et_name)){ Toast.makeText(RegisterActivity.this,"用户名不能为空!",Toast.LENGTH_SHORT).show(); //对用户名进行手机号正则化验证,调用下面写的idTelPhoneNumber方法 }else if(!isTelPhoneNumber(et_name)){ Toast.makeText(RegisterActivity.this,"请输入正确的手机号码!",Toast.LENGTH_SHORT).show(); } else if(TextUtils.isEmpty(et_password)){ Toast.makeText(RegisterActivity.this,"密码不能为空!",Toast.LENGTH_SHORT).show(); //两次密码框内容不一致 }else if(!TextUtils.equals(et_password,et_confirm)){ Toast.makeText(RegisterActivity.this,"密码不一致!",Toast.LENGTH_SHORT).show(); } else{ //存储注册的用户名和密码 把账号密码存储进数据库 insertData(dbOpenHelper.getReadableDatabase(),et_name,et_password); Toast.makeText(RegisterActivity.this,"注册成功!",Toast.LENGTH_SHORT).show(); } //关闭注册页面 跳转到登录页面 RegisterActivity.this.finish(); } }); } /*正则化验证手机号码方法*/ public static boolean isTelPhoneNumber(String mobile) { if (mobile != null && mobile.length() == 11) { Pattern pattern = Pattern.compile("^1[3|4|5|6|7|8|9][0-9]\\d{8}$"); Matcher matcher = pattern.matcher(mobile); return matcher.matches(); }else{ return false; } } //创建数据库的insert方法 插入数据方法 private void insertData(SQLiteDatabase readableDatabase, String username1, String password1){ ContentValues values=new ContentValues(); values.put("username",username1); values.put("password",password1); readableDatabase.insert("user",null,values); } //重写onDestroy()方法 @Override protected void onDestroy() { super.onDestroy(); if (dbOpenHelper != null) { dbOpenHelper.close(); } } }
package com.domain.mainView; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class LoginActivity extends AppCompatActivity { //定义登录Button 编辑框 private Button btn_login; private EditText et_password,et_userName; /*定义数据库所需成员变量 */ private DBOpenHelper dbOpenHelper; //数据库里存储的password String dbpassword; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); ListView test_text=(ListView)findViewById(R.id.test_text); //初始化 initView(); //注册完之后更新 /*定义数据库对象 */ dbOpenHelper=new DBOpenHelper(LoginActivity.this,"user.db",null,1); /*点击跳转至注册页面 【还没有账号?点击注册】按钮*/ Button btn_register1=(Button)findViewById(R.id.btn_register1); btn_register1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //点击按钮跳转到注册页面 Intent intent = new Intent(getApplicationContext(), RegisterActivity.class); //注册返回代码为0时,跳转 startActivity(intent); } }); //登录按钮单击事件 btn_login=(Button)findViewById(R.id.btn_login); btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //获取输入的密码框内容 String etpassword=et_password.getText().toString(); /*获取数据库里的数据*/ //登录按钮获取要查询的账号 String key=et_userName.getText().toString(); Cursor cursor=dbOpenHelper.getReadableDatabase().query("user",null,"username = ?",new String[]{key},null,null,null); //创建ArrayList对象,用于保存用户数据结果 ArrayList
6.这里是我登录页面上最下面有个测试窗口布局调用的这个XML,
(这个窗口是用来显示,输入框输入的用户名与之匹配的数据库的结果的)userdata_main.XML(res文件夹–右键–new–layoutxml)
/> /*注意!!!这里同时要把mainactivity的exported属性改为false 并删除 属性*/
登录注册的所有内容都在这里啦!码字不易,来过的点个赞吧!
还有还有,Android新手一枚,实现的功能比较简单,也有很多问题还没考虑到,
有什么意见欢迎多多指教,有什么问题也欢迎留在评论区沟通交流哦!
下一篇:点击查看商城主页面底部导航栏的创建:使用Bottom Navigation Activity+Fragment+ViewPager实现底部导航栏
相关文章:
Android开发----实现应用启动页
Android开发----ViewPager实现广告轮播图
Android商城开发----点击左侧分类实现右侧更新为对应的商品列表
RecyclerView设置点击选中更改背景颜色 这里是更改选中效果
Android商城开发----点击加入购物车,购物车商品的增删减