Android实现登录注册功能
作者:mmseoamin日期:2023-12-14

Android实现登录注册功能

    • 一、项目简介
    • 二、Android实现登录注册功能
      • 1.数据库连接与断开类
      • 2.用户信息类
      • 3.用户数据操作类
      • 4.登录类
        • 4.1界面展示
        • 4.2功能描述
        • 4.3主要代码
        • 5.注册类
          • 5.1界面展示
          • 5.2功能描述
          • 5.3主要代码
          • 6.源码下载链接
          • 三、总结一下

            一、项目简介

            连接云数据库MySQL实现用户的登录注册功能。

            布局方面:采取LinearLayout线性布局和RelativeLayout相对布局。

            代码方面:

            1.使用多线程:声明实现Runnable接口的类,重写run方法,实例化Runnable的实现类对象,传入某个线程的构造方法中,开启线程(.start())。

            2.通过JDBC访问数据库:注册驱动,获取连接,获取语句执行对象,执行SQL语句,处理结果集,释放资源。

            二、Android实现登录注册功能

            1.数据库连接与断开类

            MySQLConnection.java

            1.注册驱动:JDBC规范定义驱动接口是java.sql.Driver,MySQL驱动包提供了实现类com.mysql.jdbc.Driver,开发时使用Class.forName()加载一个使用字符串描述的驱动类com.mysql.jdbc.Driver

            加载驱动代码:Class.forName(“com.mysql.jdbc.Driver”).newInstance();

            2.获取连接:Connection connection=DriverManager.getConnection(“jdbc:mysql://外网地址:端口/数据库名称”,“MySQL用户名”,“MySQL密码”);

            关闭connection:connection.close();

            public class MySQLConnection {
                //要连接MySQL数据库的URL    URL_MySQL="jdbc:mysql://外网地址:端口/数据库名称"
                public static final String URL_MySQL="jdbc:mysql://外网地址:端口/数据库名称";
                //要连接MySQL数据库的用户名  NAME_MySQL="MySQL用户名"
                public static final String NAME_MySQL="MySQL用户名";
                //要连接MySQL数据库的密码    PASSWORD_MySQL="MySQL密码"
                public static final String PASSWORD_MySQL="MySQL密码";
                //使用PreparedStatement来执行SQL语句查询
                public static PreparedStatement preparedStatement;
                //使用Resultset接收JDBC查询语句返回的数据集对象
                public static ResultSet resultSet;
                //连接数据库
                public static Connection connection;
                public static void connect()
                {
                    //开启连接数据库
                    Log.d("注意","开启连接数据库中......");
                    connection=null;
                    try {
                        //加载驱动
                        Class.forName("com.mysql.jdbc.Driver").newInstance();
                        //获取与数据库的连接
                        connection= DriverManager.getConnection(URL_MySQL,NAME_MySQL,PASSWORD_MySQL);
                    }catch (Exception e){
                        //对异常情况进行处理
                        e.printStackTrace();
                    }
                }
                public static void close()
                {
                    Log.d("注意","正在关闭数据库连接......");
                    try{
                        if(resultSet!=null){
                            resultSet.close();//关闭接收
                            resultSet=null;
                        }
                        if(preparedStatement!=null){
                            preparedStatement.close();//关闭sql语句查询
                            preparedStatement=null;
                        }
                        if(connection!=null){
                            connection.close();//关闭数据库连接
                            connection=null;
                        }
                    }catch (Exception e){
                        //对异常情况进行处理
                        e.printStackTrace();
                    }
                }
            }
            

            2.用户信息类

            User.java

            public class User {
                private String username;
                private String userpassword;
                public User(){}
                public User(String username,String userpassword)
                {
                    this.username=username;
                    this.userpassword=userpassword;
                }
                public String getUsername(){
                    return username;
                }
                public void setUsername(String username) {
                    this.username = username;
                }
                public String getUserpassword() {
                    return userpassword;
                }
                public void setUserpassword(String userpassword) {
                    this.userpassword = userpassword;
                }
            }
            

            3.用户数据操作类

            UserDao.java

            这里实现查找用户名操作,查找用户名和密码操作

            注册功能:实现向数据库中添加用户数据信息操作

            String sql=“sql语句”;

            PreparedStatement preparedStatement=connection.prepareStatement(sql);

            这里connection是数据库连接对象,通过connection连接对象调用prepareStatement()方法就可以获得sql语句的执行对象preparedStatement,然后通过PreparedStatement对象就可以调用方法执行sql语句。

            这里主要用到两种方法

            方法执行结果
            preparedStatement.executeQuery()执行select语句,返回查询结果
            preparedStatement.executeUpdate()执行insert、updata和delete语句,返回值类型为整型,表示受影响行数

            while (resultSet.next())

            {

            user=new User();

            user.setUsername(resultSet.getString(“username”));

            user.setUserpassword(resultSet.getString(“userpassword”));

            }

            这里使用结果集ResultSet,调用next()方法指向结果集,若结果集不为空,则返回true。resultSet.next()指向某一行记录

            public class UserDao extends MySQLConnection{
                public User findUserName(String username)
                {
                    connect();
                    User user=null;
                    try {
                        //sql语句。我这里是根据我自己的users表的username字段来查询记录
                        String sql="select * from users where username=?";
                        //获取用于向数据库发送sql语句的preparedStatement
                        preparedStatement=connection.prepareStatement(sql);
                        //根据账号进行查询
                        preparedStatement.setString(1,username);
                        //执行sql查询语句并返回结果集
                        resultSet=preparedStatement.executeQuery();
                        while (resultSet.next())
                        {
                            //.next()表示指针先下一行,若有数据则返回true
                            user=new User();
                            user.setUsername(resultSet.getString("username"));
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }finally {
                        close();
                    }return user;//若传入成功返回账号,失败则为null
                }
                public User findUser(String username,String userpassword)
                {
                    connect();
                    User user=null;
                    try {
                        //sql语句。我这里是根据我自己的users表的username和password字段来查询记录
                        String sql="select * from users where username=? and password=?";
                        //获取用于向数据库发送sql语句的preparedStatement
                        preparedStatement=connection.prepareStatement(sql);
                        //根据账号和密码进行查询
                        preparedStatement.setString(1,username);
                        preparedStatement.setString(2,userpassword);
                        resultSet=preparedStatement.executeQuery();
                        while (resultSet.next())
                        {
                            user=new User();
                            user.setUsername(resultSet.getString("username"));
                            user.setUserpassword(resultSet.getString("userpassword"));
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }finally {
                        close();
                    }return user;//若传入成功返回账号和密码,失败则为null
                }
                public int registerUser(User user)
                {
                    int value=0;
                    connect();
                    try{
                        String sql="insert into users(username,password) values(?,?)";
                        preparedStatement=connection.prepareStatement(sql);
                        //将数据插入数据库中
                        preparedStatement.setString(1,user.getUsername());
                        preparedStatement.setString(2,user.getUserpassword());
                        value=preparedStatement.executeUpdate();
                    }catch (Exception e){
                        e.printStackTrace();
                    }finally {
                        close();
                    }return value;
                }
            }
            

            4.登录类

            4.1界面展示

            Android实现登录注册功能,login1.png,第1张

            4.2功能描述

            当输入用户名和密码后,若存在,则点击登录按钮登录成功后回到主界面,若不存在,则会弹出提醒对话框并清空输入框;

            当输入用户名、密码、用户名和密码为空时,分别弹出提醒对话框;

            当点击了记住账号、记住密码后,重新进入登录界面,用户名和密码依旧存在,但若输入的用户名和密码错误,则会取消记住功能,并清空输入框。

            4.3主要代码

            activity_login.xml

            
            
                
                    
                        
                            
                            
                            
                        
                    
                    
                    
                    
                        
                            
                            
                        
                        
                            
                            
                        
                        
                            
                            
                            
                            
                            
                        
                        
                            

            LoginActivity.java

                public void login()
                {
                    EditText editText_username=findViewById(R.id.editText_username);//获取EditText实例
                    EditText editText_userpassword=findViewById(R.id.editText_userpassword);//获取EditText实例
                    final String username=editText_username.getText().toString().trim();//获取用户输入的用户名
                    final String userpassword=editText_userpassword.getText().toString().trim();//获取用户输入的密码
                    if(TextUtils.isEmpty(username)&&!TextUtils.isEmpty(userpassword))
                    {
                        //弹出提醒对话框,提醒用户用户名不能为空
                        AlertDialog.Builder builder=new AlertDialog.Builder(LoginActivity.this);
                        builder.setIcon(R.mipmap.ic_launcher);
                        builder.setTitle("尊敬的用户");
                        builder.setMessage("用户名不能为空,请输入!");
                        builder.setPositiveButton("好的",null);
                        AlertDialog alertDialog=builder.create();
                        alertDialog.show();
                        //设计AlertDialog提醒对话框大小
                        WindowManager.LayoutParams layoutParams=alertDialog.getWindow().getAttributes();
                        layoutParams.width=700;
                        layoutParams.height=565;
                        alertDialog.getWindow().setAttributes(layoutParams);//设置AlertDialog的宽高
                        editText_username.requestFocus();
                    }else if (TextUtils.isEmpty(userpassword)&&!TextUtils.isEmpty(username))
                    {
                        //弹出提醒对话框,提醒用户密码不能为空
                        AlertDialog.Builder builder=new AlertDialog.Builder(LoginActivity.this);
                        builder.setIcon(R.mipmap.ic_launcher);
                        builder.setTitle("尊敬的用户");
                        builder.setMessage("密码不能为空,请输入!");
                        builder.setPositiveButton("好的",null);
                        AlertDialog alertDialog=builder.create();
                        alertDialog.show();
                        //设计AlertDialog提醒对话框大小
                        WindowManager.LayoutParams layoutParams=alertDialog.getWindow().getAttributes();
                        layoutParams.width=700;
                        layoutParams.height=565;
                        alertDialog.getWindow().setAttributes(layoutParams);//设置AlertDialog的宽高
                        editText_userpassword.requestFocus();
                    }else if(TextUtils.isEmpty(username)&&TextUtils.isEmpty(userpassword))
                    {
                        AlertDialog.Builder builder=new AlertDialog.Builder(LoginActivity.this);
                        builder.setIcon(R.mipmap.ic_launcher);
                        builder.setTitle("尊敬的用户");
                        builder.setMessage("请输入用户名和密码!");
                        builder.setPositiveButton("好的",null);
                        AlertDialog alertDialog=builder.create();
                        alertDialog.show();
                        //设计AlertDialog提醒对话框大小
                        WindowManager.LayoutParams layoutParams=alertDialog.getWindow().getAttributes();
                        layoutParams.width=700;
                        layoutParams.height=565;
                        alertDialog.getWindow().setAttributes(layoutParams);//设置AlertDialog的宽高
                        editText_username.requestFocus();
                        editText_userpassword.requestFocus();
                    }else
                    {
                        //这里要以线程访问,否则会报错
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                final User user_name=userDao.findUserName(username);
                                final User user=userDao.findUser(username,userpassword);
                                //这里使用Handler类中常用的一个方法,post(Runnable r),立即发送Runnable对象。这里使用已经创建的android.os.Handler对象
                                handler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        if(user_name==null)
                                        {
                                            //创建提醒对话框的建造器
                                            AlertDialog.Builder builder=new AlertDialog.Builder(LoginActivity.this);
                                            //设计对话框标题图标
                                            builder.setIcon(R.mipmap.ic_launcher);
                                            //设置对话框标题文本
                                            builder.setTitle("尊敬的用户");
                                            //设置对话框内容文本
                                            builder.setMessage("您所输入的账号不存在,请重新输入!");
                                            //设置对话框的肯定按钮文本及其点击监听器
                                            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(DialogInterface dialog, int which) {
                                                    editText_username.setText("");//清空editText_username内容
                                                    editText_userpassword.setText("");//清空editText_userpassword内容
                                                    SharedPreferences.Editor editor=sharedPreferences.edit();
                                                    editor.putBoolean("ischeckName",false);
                                                    editor.putString("username","");
                                                    editor.putBoolean("ischeckPassword",false);
                                                    editor.putString("userpassword","");
                                                    editor.commit();
                                                    CheckBox checkbox_remember_id=findViewById(R.id.checkbox_remember_id);//获取CheckBox实例
                                                    CheckBox checkbox_remember_password=findViewById(R.id.checkbox_remember_password);//获取CheckBox实例
                                                    checkbox_remember_id.setChecked(false);
                                                    checkbox_remember_password.setChecked(false);
                                                }
                                            });
                                            AlertDialog alertDialog=builder.create();//根据建造器构建提醒对话框对象
                                            alertDialog.show();//显示提醒对话框
                                            //设计AlertDialog提醒对话框大小
                                            WindowManager.LayoutParams layoutParams=alertDialog.getWindow().getAttributes();
                                            layoutParams.width=700;
                                            layoutParams.height=565;
                                            alertDialog.getWindow().setAttributes(layoutParams);//设置AlertDialog的宽高
                                            return;
                                        }
                                        if(user==null)
                                        {
                                            //创建提醒对话框的建造器
                                            AlertDialog.Builder builder=new AlertDialog.Builder(LoginActivity.this);
                                            //设计对话框标题图标
                                            builder.setIcon(R.mipmap.ic_launcher);
                                            //设置对话框标题文本
                                            builder.setTitle("尊敬的用户");
                                            //设置对话框内容文本
                                            builder.setMessage("您所输入的密码错误,请重新输入!");
                                            //设置对话框的肯定按钮文本及其点击监听器
                                            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(DialogInterface dialog, int which) {
                                                    editText_userpassword.setText("");//清空editText_userpassword内容
                                                    SharedPreferences.Editor editor=sharedPreferences.edit();
                                                    editor.putBoolean("ischeckName",false);
                                                    editor.putString("username","");
                                                    editor.putBoolean("ischeckPassword",false);
                                                    editor.putString("userpassword","");
                                                    editor.commit();
                                                    CheckBox checkbox_remember_id=findViewById(R.id.checkbox_remember_id);//获取CheckBox实例
                                                    CheckBox checkbox_remember_password=findViewById(R.id.checkbox_remember_password);//获取CheckBox实例
                                                    checkbox_remember_id.setChecked(false);
                                                    checkbox_remember_password.setChecked(false);
                                                }
                                            });
                                            AlertDialog alertDialog=builder.create();//根据建造器构建提醒对话框对象
                                            alertDialog.show();//显示提醒对话框
                                            //设计AlertDialog提醒对话框大小
                                            WindowManager.LayoutParams layoutParams=alertDialog.getWindow().getAttributes();
                                            layoutParams.width=700;
                                            layoutParams.height=565;
                                            alertDialog.getWindow().setAttributes(layoutParams);//设置AlertDialog的宽高
                                            return;
                                        }else
                                        {
                                            //如果勾选了"记住账号"复选框,就把账号保存到共享参数里
                                            if(isRememberUserName)
                                            {
                                                SharedPreferences.Editor editor=sharedPreferences.edit();//获取编辑器对象
                                                editor.putBoolean("ischeckName",true);
                                                editor.putString("username",editText_username.getText().toString());//添加名为username的账号
                                                editor.commit();//提交编辑器修改
                                            }
                                            //如果勾选了“记住密码"复选框,就把密码保存到共享参数里
                                            if(isRememberUserPassword)
                                            {
                                                SharedPreferences.Editor editor=sharedPreferences.edit();
                                                editor.putBoolean("ischeckPassword",true);
                                                editor.putString("userpassword",editText_userpassword.getText().toString());//添加名为userpassword的密码
                                                editor.commit();
                                            }
                                            //创建一个意图对象,准备跳转到指定的活动页面
                                            Intent intent=new Intent(LoginActivity.this,MainActivity.class);
                                            //跳转到意图对象指定的活动页面
                                            startActivity(intent);
                                        }
                                    }
                                });
                            }
                        }).start();
                    }
                }
                //设计读取button按钮点击的功能函数onClick()
                @RequiresApi(api = Build.VERSION_CODES.N)
                @Override
                public void onClick(View v) {
                    if(v.getId()==R.id.button_register_no)
                    {
                        //创建一个意图对象,准备跳转到指定的活动页面
                        Intent intent=new Intent(this,RegisterActivity.class);
                        //跳转到意图对象指定的活动页面
                        startActivity(intent);
                    }
                    if(v.getId()==R.id.button_login)
                    {
                        login();
                    }
                }
            

            5.注册类

            5.1界面展示

            Android实现登录注册功能,login2.png,第2张

            5.2功能描述

            当输入的账号已在数据库中存在时,则会弹出提醒对话框,并清空所有输入框,若不存在,且之后操作无误,则点击注册按钮注册成功返回登录界面;

            当输入的密码与确认密码不同时,则弹出提醒对话框,并清空输入框;

            当输入框为空,则会弹出提醒对话框;

            当点击显示密码、显示确认时,会显示隐藏的内容。

            5.3主要代码

            activity_register.xml

            
            
                
                    
                        
                            
                            
                            
                        
                    
                    
                    
                    
                        
                            
                            
                        
                        
                            
                            
                        
                        
                            
                            
                        
                        
                            
                            
                            
                            
                            
                        
                    
                    
                        

            RegisterActivity.java

                public void register()
                {
                    EditText editText_username=findViewById(R.id.editText_username);//获取EditText实例
                    EditText editText_userpassword=findViewById(R.id.editText_userpassword);//获取EditText实例
                    EditText editText_userpassword_define=findViewById(R.id.editText_userpassword_define);//获取EditText实例
                    final String username=editText_username.getText().toString().trim();//获取用户输入的用户名
                    final String userpassword=editText_userpassword.getText().toString().trim();//获取用户输入的密码
                    if(TextUtils.isEmpty(username)&&!TextUtils.isEmpty(userpassword))
                    {
                        //弹出提醒对话框,提醒用户用户名不能为空
                        AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this);
                        builder.setIcon(R.mipmap.ic_launcher);
                        builder.setTitle("尊敬的用户");
                        builder.setMessage("用户名不能为空,请输入!");
                        builder.setPositiveButton("好的",null);
                        AlertDialog alertDialog=builder.create();
                        alertDialog.show();
                        //设计AlertDialog提醒对话框大小
                        WindowManager.LayoutParams layoutParams=alertDialog.getWindow().getAttributes();
                        layoutParams.width=700;
                        layoutParams.height=565;
                        alertDialog.getWindow().setAttributes(layoutParams);//设置AlertDialog的宽高
                        editText_username.requestFocus();
                    }else if (TextUtils.isEmpty(userpassword)&&!TextUtils.isEmpty(username))
                    {
                        //弹出提醒对话框,提醒用户密码不能为空
                        AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this);
                        builder.setIcon(R.mipmap.ic_launcher);
                        builder.setTitle("尊敬的用户");
                        builder.setMessage("密码不能为空,请输入!");
                        builder.setPositiveButton("好的",null);
                        AlertDialog alertDialog=builder.create();
                        alertDialog.show();
                        //设计AlertDialog提醒对话框大小
                        WindowManager.LayoutParams layoutParams=alertDialog.getWindow().getAttributes();
                        layoutParams.width=700;
                        layoutParams.height=565;
                        alertDialog.getWindow().setAttributes(layoutParams);//设置AlertDialog的宽高
                        editText_userpassword.requestFocus();
                    }else if(TextUtils.isEmpty(username)&&TextUtils.isEmpty(userpassword))
                    {
                        AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this);
                        builder.setIcon(R.mipmap.ic_launcher);
                        builder.setTitle("尊敬的用户");
                        builder.setMessage("请输入用户名和密码!");
                        builder.setPositiveButton("好的",null);
                        AlertDialog alertDialog=builder.create();
                        alertDialog.show();
                        //设计AlertDialog提醒对话框大小
                        WindowManager.LayoutParams layoutParams=alertDialog.getWindow().getAttributes();
                        layoutParams.width=700;
                        layoutParams.height=565;
                        alertDialog.getWindow().setAttributes(layoutParams);//设置AlertDialog的宽高
                        editText_username.requestFocus();
                        editText_userpassword.requestFocus();
                    }else
                    {
                        final User user=new User();
                        user.setUsername(username);
                        user.setUserpassword(userpassword);
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                final int value=userDao.registerUser(user);
                                //这里使用Handler类中常用的一个方法,post(Runnable r),立即发送Runnable对象。这里使用已经创建的android.os.Handler对象
                                handler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        //创建一个意图对象,准备跳转到指定的活动页面
                                        Intent intent=new Intent(RegisterActivity.this,LoginActivity.class);
                                        //跳转到意图对象指定的活动页面
                                        startActivity(intent);
                                    }
                                });
                            }
                        }).start();
                    }
                }
                //设计读取button按钮点击的功能函数onClick()
                @RequiresApi(api = Build.VERSION_CODES.N)
                @Override
                public void onClick(View v) {
                    if(v.getId()==R.id.button_return_login)
                    {
                        //创建一个意图对象,准备跳转到指定的活动页面
                        Intent intent=new Intent(this,LoginActivity.class);
                        //跳转到意图对象指定的活动页面
                        startActivity(intent);
                    }
                    if(v.getId()==R.id.button_register_yes)
                    {
                        EditText editText_username=findViewById(R.id.editText_username);//获取EditText实例
                        EditText editText_userpassword=findViewById(R.id.editText_userpassword);//获取EditText实例
                        EditText editText_userpassword_define=findViewById(R.id.editText_userpassword_define);//获取EditText实例
                        final String username=editText_username.getText().toString().trim();//获取用户输入的用户名
                        String password1=editText_userpassword.getText().toString();
                        String password2=editText_userpassword_define.getText().toString();
                        if(password1.equals(password2))
                        {
                            //密码和确认密码相同
                            //这里要以线程访问,否则会报错
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
                                    final User user_name=userDao.findUserName(username);
                                    //这里使用Handler类中常用的一个方法,post(Runnable r),立即发送Runnable对象。这里使用已经创建的android.os.Handler对象
                                    handler.post(new Runnable() {
                                        @Override
                                        public void run() {
                                            if(user_name!=null)
                                            {
                                                //创建提醒对话框的建造器
                                                AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this);
                                                //设计对话框标题图标
                                                builder.setIcon(R.mipmap.ic_launcher);
                                                //设置对话框标题文本
                                                builder.setTitle("尊敬的用户");
                                                //设置对话框内容文本
                                                builder.setMessage("您所输入的账号已存在,请重新输入!");
                                                //设置对话框的肯定按钮文本及其点击监听器
                                                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                                    @Override
                                                    public void onClick(DialogInterface dialog, int which) {
                                                        editText_username.setText("");//清空editText_username内容
                                                        editText_userpassword.setText("");//清空editText_userpassword内容
                                                        editText_userpassword_define.setText("");//清空editText_userpassword_define内容
                                                    }
                                                });
                                                AlertDialog alertDialog=builder.create();//根据建造器构建提醒对话框对象
                                                alertDialog.show();//显示提醒对话框
                                                //设计AlertDialog提醒对话框大小
                                                WindowManager.LayoutParams layoutParams=alertDialog.getWindow().getAttributes();
                                                layoutParams.width=700;
                                                layoutParams.height=565;
                                                alertDialog.getWindow().setAttributes(layoutParams);//设置AlertDialog的宽高
                                                return;
                                            }else
                                            {
                                                register();
                                            }
                                        }
                                    });
                                }
                            }).start();
                        }else
                        {
                            //不同
                            //创建提醒对话框的建造器
                            AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this);
                            //设计对话框标题图标
                            builder.setIcon(R.mipmap.ic_launcher);
                            //设置对话框标题文本
                            builder.setTitle("尊敬的用户");
                            //设置对话框内容文本
                            builder.setMessage("密码和确认密码不同,请重新输入!");
                            //设置对话框的肯定按钮文本及其点击监听器
                            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    editText_userpassword.setText("");//清空editText_userpassword内容
                                    editText_userpassword_define.setText("");//清空editText_userpassword_define内容
                                }
                            });
                            AlertDialog alertDialog=builder.create();//根据建造器构建提醒对话框对象
                            alertDialog.show();//显示提醒对话框
                            //设计AlertDialog提醒对话框大小
                            WindowManager.LayoutParams layoutParams=alertDialog.getWindow().getAttributes();
                            layoutParams.width=700;
                            layoutParams.height=565;
                            alertDialog.getWindow().setAttributes(layoutParams);//设置AlertDialog的宽高
                            return;
                        }
                    }
                }
            

            6.源码下载链接

            GitHub链接: Android登录注册功能(连接云数据库MySQL)

            三、总结一下

            当某个程序第一次启动的时候,Android会启动一条主线程负责接收用户的输入以及操作结果的反馈,也称UI线程,创建子线程是为了执行一些可能产生阻塞操作而新启动的线程。

            这里使用Handler类中的一个常用方法post(Runnable r),立即发送Runnable对象,可以方便地使用Handler来进行消息传递。