3.Mysql开启远程连接参考这篇:https://blog.csdn.net/weixin_44013967/article/details/105312455?spm=1001.2101.3001.6661..._android连接mysql数据库实现注册">
当前位置:   article > 正文

Android studio使用JDBC连接My SQL实现登陆注册修改(用户登录界面)详解_android连接mysql数据库实现注册

android连接mysql数据库实现注册

一,准备工作

1.下载mysql-connector-java

2.在Android Manifest.xml中配置添加

 <uses-permission android:name="android.permission.INTERNET" />

3. Mysql开启远程连接

参考这篇:

https://blog.csdn.net/weixin_44013967/article/details/105312455?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ETopBlog-1.topblog&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ETopBlog-1.topblog&utm_relevant_index=1https://blog.csdn.net/weixin_44013967/article/details/105312455?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~TopBlog-1.topblog&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~TopBlog-1.topblog&utm_relevant_index=1

4.在数据库创建表添加数据(这里比较简单的添加) 

二、编写Android Studio的java类和xml布局文件

1.在Android Studio当中创建JDBCUtils类

  1. package com.example.login_test;
  2. import android.util.Log;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.SQLException;
  6. public class JDBCUtils {
  7. private static String driver = "com.mysql.jdbc.Driver";// MySql驱动
  8. //xxx.xxx.xxx.xxx为我电脑的ip,这里要用自己电脑的ip,login为我电脑的数据库名,也要换。
  9. private static String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/login?serverTimezone=UTC";
  10. private static String user = "root";// 用户名
  11. private static String password = "abc123";// 密码
  12. public static Connection getConn() {
  13. //开启连接数据库
  14. Log.d("test", "开启连接数据库。。。。。");
  15. Connection connection = null;
  16. try{
  17. Class.forName(driver);// 动态加载类
  18. connection = DriverManager.getConnection(url, user, password); // 尝试建立到给定数据库URL的连接
  19. }catch (Exception e){
  20. e.printStackTrace();
  21. }
  22. return connection;
  23. }
  24. public static void close(Connection conn){//关闭数据库连接
  25. Log.d("test", "关闭数据库连接。。。。");
  26. try {
  27. conn.close();
  28. } catch (SQLException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. }

 2.创建User类(这里我写的比较简单,大家有要求可以添加)

  1. package com.example.login_test;
  2. public class User {//用户类
  3. String user_name;
  4. String user_password;
  5. public User() {
  6. }
  7. public User(String user_name, String password) {
  8. this.user_name = user_name;
  9. this.user_password = password;
  10. }
  11. public String getUser_name() {
  12. return user_name;
  13. }
  14. public void setUser_name(String user_name) {
  15. this.user_name = user_name;
  16. }
  17. public String getPassword() {
  18. return user_password;
  19. }
  20. public void setPassword(String user_password) {
  21. this.user_password = user_password;
  22. }
  23. }

3.创建dao层和UserDao

  1. package com.example.login_test;
  2. import android.util.Log;
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Statement;
  8. public class UserDao {
  9. public boolean login(String username, String password) {//判断是否登录成功
  10. Log.d("test", "开始成功。。。。。");
  11. String sql = "select * from user where username = ? and password = ?";//sql语句
  12. Connection con = JDBCUtils.getConn();//连接数据库
  13. try {
  14. PreparedStatement pst = con.prepareStatement(sql);//调用数据库连接对象con的方法prepareStatement获取SQL语句的预编译对
  15. pst.setString(1, username);//调用pst的方法setXXX设置?占位
  16. pst.setString(2, password);
  17. if (pst.executeQuery().next()) {//查数据用executeQuery() 返回的是一个集合,如果有数据就返回true
  18. Log.d("test", "登录成功");
  19. return true;
  20. }
  21. } catch (SQLException e) {
  22. e.printStackTrace();
  23. } finally {
  24. JDBCUtils.close(con);//关闭数据库
  25. }
  26. Log.d("test", "登录失败");
  27. return false;
  28. }
  29. public boolean register(User user) {//注册用户密码
  30. Log.d("test", "开始注册。。。。。");
  31. String sql = "insert into user(username,password) values (?,?)";//sql语句
  32. Connection con = JDBCUtils.getConn();//连接数据库
  33. try {
  34. PreparedStatement pst = con.prepareStatement(sql);//调用数据库连接对象con的方法prepareStatement获取SQL语句的预编译对
  35. pst.setString(1, user.getUser_name());//调用pst的方法setXXX设置?占位
  36. pst.setString(2, user.getPassword());
  37. int value = pst.executeUpdate();//executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)
  38. if (value > 0) {
  39. Log.d("test", "register: 注册成功");
  40. return true;
  41. }
  42. } catch (SQLException e) {
  43. e.printStackTrace();
  44. } finally {
  45. JDBCUtils.close(con);
  46. }
  47. Log.d("test", "register: 注册失败");
  48. return false;
  49. }
  50. public User findUser(String username) {//查询用户名
  51. String sql = "select * from user where username = ?";
  52. Connection con = JDBCUtils.getConn();//连接数据库
  53. User user = null;
  54. try {
  55. PreparedStatement pst = con.prepareStatement(sql);//调用数据库连接对象con的方法prepareStatement获取SQL语句的预编译对
  56. pst.setString(1, username); // 调用pst的方法setXXX设置?占位
  57. ResultSet rs = pst.executeQuery();//查数据用executeQuery() 返回的是一个集合,如果有数据就返回true
  58. while (rs.next()) {//.next()表示 指针先下一行,如果有数据就返回true
  59. String name = rs.getString(1);//获取查询到的账号密码
  60. String password = rs.getString(2);
  61. user = new User(name, password);//传给user对象
  62. }
  63. } catch (SQLException e) {
  64. e.printStackTrace();
  65. } finally {
  66. JDBCUtils.close(con);
  67. }
  68. return user;//传入成功返回账号密码,失败则为null
  69. }
  70. public int update(String name,String password) {
  71. String sql = "update user set password=? where username=?";
  72. Connection con = JDBCUtils.getConn();//连接数据库
  73. int i = 0;
  74. Log.d("test", "开始修改。。。。。");
  75. try {
  76. PreparedStatement pst = con.prepareStatement(sql);
  77. pst.setString(2, name);//调用pst的方法setXXX设置?占位
  78. pst.setString(1, password);
  79. i = pst.executeUpdate();
  80. System.out.println("resutl: " + i);
  81. pst.close();
  82. con.close();
  83. } catch (SQLException e) {
  84. e.printStackTrace();
  85. }
  86. return i;
  87. }
  88. public int updateUserData(User user){
  89. Log.d("test"," 开始修改。。。。。");
  90. int result=-1;
  91. //获取链接数据库对象
  92. Connection con= JDBCUtils.getConn();
  93. //MySQL 语句
  94. String sql="update user set password=? where username=?";
  95. try {
  96. boolean closed=con.isClosed();
  97. if(con!=null&&(!closed)){
  98. PreparedStatement pst=con.prepareStatement(sql);
  99. pst.setString(1,user.getPassword());
  100. //第一个参数state 一定要和上面SQL语句字段顺序一致
  101. pst.setString(2, user.getUser_name());
  102. //第二个参数 phone 一定要和上面SQL语句字段顺序一致
  103. result=pst.executeUpdate();
  104. //返回1 执行成功
  105. Log.d("test"," 修改成功。。。。。");
  106. Log.d("test","result: "+result);
  107. }
  108. } catch (SQLException e) {
  109. e.printStackTrace();
  110. } finally {
  111. JDBCUtils.close(con);
  112. }
  113. return result;
  114. }
  115. }

三、编写页面和Activity相关代码(这里写的比较粗糙,有些功能不全,欢迎各位大神来指导交流)

图片资源:

 1.登录页面 activity_login.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".Login_Activity"
  8. android:orientation="vertical"
  9. android:background="@drawable/wallpaper1"
  10. >
  11. <LinearLayout
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:orientation="vertical"
  15. android:padding="60dp"
  16. android:layout_marginTop="90dp"
  17. >
  18. <LinearLayout
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:layout_gravity="center"
  22. >
  23. <TextView
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:text="Welcome"
  27. android:textSize="60dp"
  28. android:textColor="#fff"
  29. />
  30. </LinearLayout>
  31. <LinearLayout
  32. android:layout_width="match_parent"
  33. android:layout_height="wrap_content"
  34. android:layout_marginTop="40dp"
  35. >
  36. <EditText
  37. android:id="@+id/user_name"
  38. android:hint="请输入账号"
  39. android:textSize="15dp"
  40. android:paddingLeft="20dp"
  41. android:layout_width="match_parent"
  42. android:layout_height="45dp"
  43. android:background="#fff"
  44. android:alpha="0.9"
  45. />
  46. </LinearLayout>
  47. <LinearLayout
  48. android:layout_width="match_parent"
  49. android:layout_height="wrap_content"
  50. android:layout_marginTop="3dp">
  51. <EditText
  52. android:id="@+id/user_passw"
  53. android:hint="请输入密码"
  54. android:textSize="15dp"
  55. android:paddingLeft="20dp"
  56. android:inputType="textPassword"
  57. android:layout_width="match_parent"
  58. android:layout_height="45dp"
  59. android:background="#fff"
  60. android:alpha="0.9"
  61. />
  62. </LinearLayout>
  63. <LinearLayout
  64. android:layout_marginTop="5dp"
  65. android:layout_width="match_parent"
  66. android:layout_height="wrap_content"
  67. android:gravity="right">
  68. <TextView
  69. android:layout_width="wrap_content"
  70. android:layout_height="wrap_content"
  71. android:text="修改密码"
  72. android:textColor="#af3a11"
  73. android:onClick="amend"
  74. />
  75. </LinearLayout>
  76. <LinearLayout
  77. android:layout_width="match_parent"
  78. android:layout_height="wrap_content"
  79. android:layout_marginTop="20dp"
  80. >
  81. <Button
  82. android:id="@+id/btn_login"
  83. android:layout_width="match_parent"
  84. android:layout_height="wrap_content"
  85. android:background="#fd8f36"
  86. android:text="Sign in"
  87. android:textColor="#ffffff"
  88. android:textSize="25dp"
  89. android:textAllCaps="false"
  90. android:onClick="login"
  91. />
  92. </LinearLayout>
  93. <LinearLayout
  94. android:layout_width="match_parent"
  95. android:layout_height="wrap_content"
  96. android:layout_marginTop="20dp"
  97. >
  98. <Button
  99. android:id="@+id/btn_add"
  100. android:layout_width="match_parent"
  101. android:layout_height="wrap_content"
  102. android:background="#af3a11"
  103. android:text="Sign up"
  104. android:textColor="#ffffff"
  105. android:textSize="25dp"
  106. android:textAllCaps="false"
  107. android:onClick="add"
  108. />
  109. </LinearLayout>
  110. </LinearLayout>
  111. </RelativeLayout>

 2.注册页面 activity_add_.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".Add_Activity"
  8. android:orientation="vertical"
  9. android:background="@drawable/wallpaper1"
  10. >
  11. <TextView
  12. android:layout_marginLeft="10dp"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:text="(---"
  16. android:textSize="40dp"
  17. android:textColor="#ffffff"
  18. android:onClick="back"
  19. />
  20. <LinearLayout
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content"
  23. android:orientation="vertical"
  24. android:padding="60dp"
  25. android:layout_marginTop="90dp"
  26. >
  27. <LinearLayout
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content"
  30. android:layout_gravity="center"
  31. >
  32. <TextView
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:text="Welcome"
  36. android:textSize="60dp"
  37. android:textColor="#fff"
  38. />
  39. </LinearLayout>
  40. <LinearLayout
  41. android:layout_width="match_parent"
  42. android:layout_height="wrap_content"
  43. android:layout_marginTop="40dp"
  44. >
  45. <EditText
  46. android:id="@+id/add_name"
  47. android:hint="账号"
  48. android:textSize="15dp"
  49. android:paddingLeft="20dp"
  50. android:layout_width="match_parent"
  51. android:layout_height="45dp"
  52. android:background="#fff"
  53. android:alpha="0.9"
  54. />
  55. </LinearLayout>
  56. <LinearLayout
  57. android:layout_width="match_parent"
  58. android:layout_height="wrap_content"
  59. android:layout_marginTop="3dp">
  60. <EditText
  61. android:id="@+id/add_password1"
  62. android:layout_width="match_parent"
  63. android:layout_height="45dp"
  64. android:alpha="0.9"
  65. android:background="#fff"
  66. android:hint="密码"
  67. android:inputType="textPassword"
  68. android:paddingLeft="20dp"
  69. android:textSize="15dp" />
  70. </LinearLayout>
  71. <LinearLayout
  72. android:layout_width="match_parent"
  73. android:layout_height="wrap_content"
  74. android:layout_marginTop="3dp">
  75. <EditText
  76. android:id="@+id/add_password2"
  77. android:hint="确认密码"
  78. android:textSize="15dp"
  79. android:paddingLeft="20dp"
  80. android:layout_width="match_parent"
  81. android:inputType="textPassword"
  82. android:layout_height="45dp"
  83. android:background="#fff"
  84. android:alpha="0.9"
  85. />
  86. </LinearLayout>
  87. <LinearLayout
  88. android:layout_marginTop="3dp"
  89. android:orientation="horizontal"
  90. android:layout_width="match_parent"
  91. android:layout_height="wrap_content">
  92. <EditText
  93. android:id="@+id/ed_yzm"
  94. android:hint="验证码"
  95. android:textSize="15dp"
  96. android:paddingLeft="20dp"
  97. android:layout_width="0dp"
  98. android:layout_weight="1"
  99. android:layout_height="45dp"
  100. android:background="#fff"
  101. android:alpha="0.9"
  102. />
  103. <ImageView
  104. android:id="@+id/img_yzm"
  105. android:layout_marginLeft="5dp"
  106. android:layout_width="0dp"
  107. android:layout_weight="1"
  108. android:layout_height="match_parent"
  109. android:onClick="cut"
  110. />
  111. </LinearLayout>
  112. <LinearLayout
  113. android:layout_width="match_parent"
  114. android:layout_height="wrap_content"
  115. android:layout_marginTop="20dp"
  116. >
  117. <Button
  118. android:id="@+id/btn_add"
  119. android:layout_width="match_parent"
  120. android:layout_height="wrap_content"
  121. android:background="#af3a11"
  122. android:text="Sign up"
  123. android:textColor="#ffffff"
  124. android:textSize="25dp"
  125. android:textAllCaps="false"
  126. android:onClick="add"
  127. />
  128. </LinearLayout>
  129. </LinearLayout>
  130. </RelativeLayout>

3.验证码 CodeUtils

  1. package com.example.login_test;
  2. import android.graphics.Bitmap;
  3. import android.graphics.Canvas;
  4. import android.graphics.Color;
  5. import android.graphics.Paint;
  6. import java.util.Random;
  7. public class CodeUtils {//验证码工具类
  8. private static final char[] CHARS = {
  9. '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  10. 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
  11. 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
  12. 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
  13. 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
  14. };
  15. // 绘图准备
  16. private static CodeUtils mCodeUtils;
  17. private int mPaddingLeft, mPaddingTop;
  18. private StringBuilder mBuilder = new StringBuilder();
  19. private Random mRandom = new Random();
  20. private static final int DEFAULT_CODE_LENGTH = 6;//验证码的长度 这里6位,可以简单点,简单一点
  21. private static final int DEFAULT_FONT_SIZE = 60;//字体大小
  22. private static final int DEFAULT_LINE_NUMBER = 3;//多少条干扰线
  23. private static final int BASE_PADDING_LEFT = 20; //左边距
  24. private static final int RANGE_PADDING_LEFT = 30;//左边距范围值
  25. private static final int BASE_PADDING_TOP = 70;//上边距
  26. private static final int RANGE_PADDING_TOP = 15;//上边距范围值
  27. private static final int DEFAULT_WIDTH = 300;//默认宽度.图片的总宽
  28. private static final int DEFAULT_HEIGHT = 100;//默认高度.图片的总高
  29. private static final int DEFAULT_COLOR = 0xDF;//默认背景颜色值
  30. private String code;
  31. public static CodeUtils getInstance() {
  32. if (mCodeUtils == null) {
  33. mCodeUtils = new CodeUtils();
  34. }
  35. return mCodeUtils;
  36. }
  37. public Bitmap createBitmap() {
  38. mPaddingLeft = 0;
  39. mPaddingTop = 0;
  40. Bitmap bitmap = Bitmap.createBitmap(DEFAULT_WIDTH, DEFAULT_HEIGHT, Bitmap.Config.ARGB_8888);
  41. Canvas canvas = new Canvas(bitmap);
  42. code = createCode();
  43. canvas.drawColor(Color.rgb(DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_COLOR));
  44. Paint paint = new Paint();
  45. paint.setTextSize(DEFAULT_FONT_SIZE);
  46. for (int i = 0; i < code.length(); i++) {
  47. randomTextStyle(paint);
  48. randomPadding();
  49. canvas.drawText(code.charAt(i) + "", mPaddingLeft, mPaddingTop, paint);
  50. }
  51. for (int i = 0; i < DEFAULT_LINE_NUMBER; i++) {
  52. drawLine(canvas, paint);
  53. }
  54. // 这段代码,由于API28版本太高不能使用,所以需要降版本,否则报错
  55. canvas.save();
  56. canvas.restore();
  57. return bitmap;
  58. }
  59. public String getCode() {
  60. return code;
  61. }
  62. public String createCode() {
  63. mBuilder.delete(0, mBuilder.length());
  64. for (int i = 0; i < DEFAULT_CODE_LENGTH; i++) {
  65. mBuilder.append(CHARS[mRandom.nextInt(CHARS.length)]);
  66. }
  67. return mBuilder.toString();
  68. }
  69. private void drawLine(Canvas canvas, Paint paint) {
  70. int color = randomColor();
  71. int startX = mRandom.nextInt(DEFAULT_WIDTH);
  72. int startY = mRandom.nextInt(DEFAULT_HEIGHT);
  73. int stopX = mRandom.nextInt(DEFAULT_WIDTH);
  74. int stopY = mRandom.nextInt(DEFAULT_HEIGHT);
  75. paint.setStrokeWidth(1);
  76. paint.setColor(color);
  77. canvas.drawLine(startX, startY, stopX, stopY, paint);
  78. }
  79. private int randomColor() {
  80. mBuilder.delete(0, mBuilder.length());
  81. String haxString;
  82. for (int i = 0; i < 3; i++) {
  83. haxString = Integer.toHexString(mRandom.nextInt(0xFF));
  84. if (haxString.length() == 1) {
  85. haxString = "0" + haxString;
  86. }
  87. mBuilder.append(haxString);
  88. }
  89. return Color.parseColor("#" + mBuilder.toString());
  90. }
  91. private void randomTextStyle(Paint paint) {
  92. int color = randomColor();
  93. paint.setColor(color);
  94. paint.setFakeBoldText(mRandom.nextBoolean());
  95. float skewX = mRandom.nextInt(11) / 10;
  96. skewX = mRandom.nextBoolean() ? skewX : -skewX;
  97. paint.setTextSkewX(skewX);
  98. }
  99. private void randomPadding() {
  100. mPaddingLeft += BASE_PADDING_LEFT + mRandom.nextInt(RANGE_PADDING_LEFT);
  101. mPaddingTop = BASE_PADDING_TOP + mRandom.nextInt(RANGE_PADDING_TOP);
  102. }
  103. }

4.完善登录功能  Login_Activity

  1. package com.example.login_test;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.os.Message;
  7. import android.text.TextUtils;
  8. import android.util.Log;
  9. import android.view.View;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. import android.widget.TextView;
  13. import android.widget.Toast;
  14. import java.sql.Connection;
  15. import java.sql.DriverManager;
  16. import java.sql.ResultSet;
  17. import java.sql.SQLException;
  18. import java.sql.Statement;
  19. public class Login_Activity extends AppCompatActivity{//登录页面
  20. private EditText editTextname;
  21. private EditText editTextpassword;
  22. User user;
  23. User uu;
  24. @Override
  25. protected void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.activity_login);
  28. getSupportActionBar().hide();
  29. intUI();//初始化页面
  30. }
  31. private void intUI() {
  32. editTextname = (EditText)findViewById(R.id.user_name);
  33. editTextpassword = (EditText)findViewById(R.id.user_passw);
  34. }
  35. public void login(View view) {
  36. final String user_name=editTextname.getText().toString();//获取账号
  37. String user_password=editTextpassword.getText().toString();//获取密码
  38. user=new User();
  39. user.setUser_name(user_name);//把数据传给user对象
  40. Log.d("”test", "add_name:"+user_name);
  41. if(TextUtils.isEmpty(user_name)){//判账号是否为空
  42. Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show();
  43. return;
  44. }else if(TextUtils.isEmpty(user_password)){//判密码是否为空
  45. Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
  46. return;
  47. }
  48. //必须以线程形式访问,否则报错,我也是萌新不懂,照做就对了
  49. new Thread(new Runnable() {
  50. @Override
  51. public void run() {
  52. UserDao userDao = new UserDao();
  53. uu = userDao.findUser(user.getUser_name());
  54. Log.d("test", "uu:"+uu);
  55. boolean aa = userDao.login(editTextname.getText().toString(),editTextpassword.getText().toString());
  56. int msg = 0;
  57. if(aa){
  58. msg = 1;
  59. }else{
  60. msg = 2;
  61. }
  62. hand1.sendEmptyMessage(msg);
  63. }
  64. }).start();
  65. }
  66. final Handler hand1 = new Handler(){
  67. public void handleMessage(Message msg) {
  68. if(uu==null){
  69. Toast.makeText(Login_Activity.this, "未找到用户,请注册", Toast.LENGTH_SHORT).show();
  70. return;
  71. }else {
  72. if (msg.what == 1) {
  73. Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_LONG).show();
  74. Intent intent = new Intent(Login_Activity.this,Login_after_Activity.class);
  75. startActivity(intent);
  76. } else if (msg.what == 2) {
  77. Toast.makeText(getApplicationContext(), "密码错误", Toast.LENGTH_LONG).show();
  78. }
  79. }
  80. }
  81. };
  82. public void add(View view) {
  83. Intent intent = new Intent(Login_Activity.this,Add_Activity.class);
  84. startActivity(intent);
  85. finish();
  86. }
  87. public void amend(View view) {
  88. Intent intent = new Intent(Login_Activity.this,Change_Activity.class);
  89. startActivity(intent);
  90. finish();
  91. }
  92. }

5.完善注册功能 Add_Activity

  1. package com.example.login_test;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.os.Message;
  7. import android.util.Log;
  8. import android.view.View;
  9. import android.widget.EditText;
  10. import android.widget.ImageView;
  11. import android.widget.Toast;
  12. public class Add_Activity extends AppCompatActivity {//注册页面
  13. private EditText add_password1;
  14. private EditText add_password2;
  15. private EditText add_name;
  16. private String realCode;
  17. private EditText ed_yzm;
  18. private ImageView iv_yzm;
  19. String etCode;
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_add_);
  24. intUI();//初始化
  25. getSupportActionBar().hide();//隐藏标题栏
  26. }
  27. private void intUI() {
  28. add_name = findViewById(R.id.add_name);
  29. add_password1 = findViewById(R.id.add_password1);
  30. add_password2 = findViewById(R.id.add_password2);
  31. iv_yzm = findViewById(R.id.img_yzm);
  32. ed_yzm = findViewById(R.id.ed_yzm);
  33. iv_yzm.setImageBitmap(CodeUtils.getInstance().createBitmap());
  34. realCode = CodeUtils.getInstance().getCode().toLowerCase();
  35. }
  36. public void cut(View view) {//验证码
  37. iv_yzm.setImageBitmap(CodeUtils.getInstance().createBitmap());
  38. realCode = CodeUtils.getInstance().getCode().toLowerCase();
  39. }
  40. public void add(View view) {//注册按钮
  41. Log.d("”test", "add: 开始注册");
  42. String user_name=add_name.getText().toString();
  43. String user_password1=add_password1.getText().toString();
  44. String user_password2=add_password2.getText().toString();
  45. Log.d("”test", "add_name:"+user_name);
  46. Log.d("”test", "add_password1:"+user_password1);
  47. Log.d("”test", "add_password2:"+user_password2);
  48. final User user = new User();//创建对象
  49. user.setUser_name(user_name);//传值
  50. user.setPassword(user_password1);//z
  51. if(user_name.length() <10 ){
  52. Toast.makeText(getApplicationContext(),"账户长度不符合要求<至少10位数>",Toast.LENGTH_LONG).show();
  53. return;
  54. }
  55. if(user_password1.length()<6 ){
  56. Toast.makeText(getApplicationContext(),"密码长度不符合要求<至少6个字符/数字>",Toast.LENGTH_LONG).show();
  57. return;
  58. }
  59. if(user_password2==null){
  60. Toast.makeText(getApplicationContext(),"请再次输入密码",Toast.LENGTH_LONG).show();
  61. return;
  62. }
  63. if(user_password1.equals(user_password2)){
  64. }else {
  65. Toast.makeText(getApplicationContext(),"密码不一致,请重新输入",Toast.LENGTH_LONG).show();
  66. return;
  67. }
  68. etCode=ed_yzm.getText().toString().toLowerCase();//获取验证码
  69. if(etCode.equals(realCode)){
  70. }else{
  71. Toast.makeText(Add_Activity.this, "请输入正确的验证码", Toast.LENGTH_SHORT).show();
  72. return;
  73. }
  74. new Thread(new Runnable() {
  75. @Override
  76. public void run() {
  77. int msg = 0;
  78. UserDao userDao = new UserDao();
  79. User uu = userDao.findUser(user.getUser_name());//查询用户名
  80. Log.d("test", "uu:"+uu);
  81. if(uu != null){
  82. msg = 1;
  83. }else{
  84. boolean flag = userDao.register(user);
  85. Log.d("test", "user"+user);
  86. if(flag){
  87. msg = 2;
  88. }
  89. }
  90. Log.d("test",etCode);
  91. hand.sendEmptyMessage(msg);
  92. }
  93. }).start();
  94. }
  95. final Handler hand = new Handler(){
  96. public void handleMessage(Message msg) {
  97. if(msg.what == 0){
  98. Toast.makeText(Add_Activity.this, "注册失败", Toast.LENGTH_SHORT).show();
  99. }
  100. if(msg.what == 1)
  101. {
  102. Toast.makeText(Add_Activity.this, "该账号已经存在,请换一个账号", Toast.LENGTH_SHORT).show();
  103. }
  104. if(msg.what == 2) {
  105. Toast.makeText(Add_Activity.this, "注册成功", Toast.LENGTH_SHORT).show();
  106. Log.d("”test", "add: 用户注册成功");
  107. Intent intent = new Intent(Add_Activity.this,Login_Activity.class);
  108. intent.putExtra("a","注冊");
  109. startActivity(intent);
  110. finish();
  111. }
  112. }
  113. };
  114. public void back(View view) {
  115. Intent intent=new Intent(Add_Activity.this,Login_Activity.class);
  116. startActivity(intent);
  117. }
  118. }

6.修改密码页面  Change_Activity

  1. package com.example.login_test;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.os.Message;
  7. import android.util.Log;
  8. import android.view.View;
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11. import android.widget.Toast;
  12. public class Change_Activity extends AppCompatActivity {
  13. private EditText change_password2;
  14. private EditText change_password1;
  15. private EditText change_password;
  16. private EditText change_name;
  17. private Button btn_change;
  18. User uu;
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_change);
  23. getSupportActionBar().hide();
  24. intUI();
  25. }
  26. private void intUI() {
  27. change_name = findViewById(R.id.change_name);
  28. change_password = findViewById(R.id.change_password);
  29. change_password1 = findViewById(R.id.change_password1);
  30. change_password2 = findViewById(R.id.change_password2);
  31. btn_change = findViewById(R.id.btn_change);
  32. }
  33. public void change(View view) {
  34. final String Change_name=change_name.getText().toString();
  35. final String Change_password=change_password.getText().toString();
  36. final String Change_password1=change_password1.getText().toString();
  37. final String Change_password2=change_password2.getText().toString();
  38. if(Change_name.length()<6){
  39. Toast.makeText(this, "账号长度不够。。。", Toast.LENGTH_SHORT).show();
  40. return;
  41. }
  42. if(Change_password.length()<=0||Change_password1.length()<=0){
  43. Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();
  44. return;
  45. }
  46. if(Change_password1==null){
  47. Toast.makeText(this, "新密码不能为空", Toast.LENGTH_SHORT).show();
  48. return;
  49. }
  50. if(!(Change_password1.equals(Change_password2))){
  51. Toast.makeText(this, "两次密码不一致", Toast.LENGTH_SHORT).show();
  52. return;
  53. }
  54. uu=new User();
  55. uu.setUser_name(Change_name);
  56. uu.setUser_name(Change_password);
  57. new Thread(new Runnable() {
  58. @Override
  59. public void run() {
  60. User user = new User(Change_name,Change_password2);
  61. UserDao userDao = new UserDao();
  62. uu = userDao.findUser(user.getUser_name());
  63. Log.d("test", "uu:"+uu);
  64. boolean aa = userDao.login(Change_name,Change_password2);
  65. userDao.updateUserData(user);
  66. int msg = 0;
  67. if(aa){
  68. msg = 1;
  69. }else{
  70. msg = 2;
  71. }
  72. hand1.sendEmptyMessage(msg);
  73. }
  74. }).start();
  75. }
  76. final Handler hand1 = new Handler(){
  77. public void handleMessage(Message msg) {
  78. if(uu==null){
  79. Toast.makeText(Change_Activity.this, "未找到用户,请注册", Toast.LENGTH_SHORT).show();
  80. return;
  81. }else {
  82. if (msg.what == 1) {
  83. Toast.makeText(getApplicationContext(), "修改成功", Toast.LENGTH_LONG).show();
  84. Intent intent = new Intent(Change_Activity.this,Login_Activity.class);
  85. startActivity(intent);
  86. } else if (msg.what == 2) {
  87. Toast.makeText(getApplicationContext(), "原密码错误", Toast.LENGTH_LONG).show();
  88. }
  89. }
  90. }
  91. };
  92. public void back(View view) {
  93. Intent intent = new Intent(Change_Activity.this,Login_Activity.class);
  94. startActivity(intent);
  95. }
  96. }

7.登录成功页面 (这里写的很简单,各位大神自行发挥) 有更好的或者写的不对的地方评论区交流,,欢迎大神来指点。。。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/400761
推荐阅读
相关标签
  

闽ICP备14008679号