Android Studio实现登录界面并跳转(20220914)

作者 by admin / 2022-09-14 / 暂无评论 / 1696 个足迹

题目
使用Android Studio写一个登录界面,需要包含账号输入框,密码输入框,登录和注册按钮。
登录时若密码错误或者不存在这个账号需要给用户反馈,登录成功后跳转到另外一个页面。

注:登录所需的数据在我提供的云数据库上,账号密码请看群
学习网址:https://www.runoob.com/java/java-mysql-connect.html
jar包请看群文件

中等:实现登录、注册功能,登录成功后跳转
所需知识:
MySQL:基础语法(仅需要了解select和insert即可)
Java:List的基本知识,MySQL连接
Android:EditText控件,LinearLayout布局,Intent的跳转,子线程的编写,异步处理(handler)

较难:在中等的前提下,实现跳转界面展示数据库里的数据
中等前提下还需要你掌握:
Intent的传值,java序列化(Serializable),布局服务(LayoutInflater)


题目不难,总体上是几个模块聚合到一起。
首先我们来解决数据库访问的问题,这里需要我们访问数据库并读取数据,首先将jdbc驱动引入,参考网址

初始化数据库驱动:

//JDBC 驱动名
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    //数据库读写外网地址
    static final String DB_URL = "数据库链接";
    //账号密码
    static final String USER = "数据库账号";
    static final String PASS = "数据库密码";

    Connection connection = null;
    Statement statement = null;
    String sql=null;
    MySQL(){
        try {
            Class.forName(JDBC_DRIVER);
            connection = DriverManager.getConnection(DB_URL,USER,PASS);
            statement = connection.createStatement();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }

登录所需的数据库函数(数据库的密码为了演示,是明文存储,正常情况下会加密):

/**
     * 验证账号密码是否正确
     * @param account
     *              账号
     * @param password
     *              密码
     * @return
     *              返回值为账号密码是否正确
     */
    public boolean Login(String account,String password){
        sql = "SELECT password FROM account WHERE account='"+account+"'";//查询语句
        try {
            ResultSet rs = statement.executeQuery(sql);//如果没有这个值就catch error
            //因为一个账号对应一个密码
            rs.next();
            String sql_pass = rs.getString("password");
            rs.close();
            return password.equals(sql_pass);

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

注册所需的数据库函数(同登录一样,只不过是将select语句换为insert语句):

/**
     * 注册账号
     * @param account
     *              账号
     * @param password
     *              密码
     * @return
     *              返回值为注册是否成功
     */
    public boolean Register(String account,String password){
        //由于account是主键,所以不会有重复
        sql = "INSERT INTO account VALUES('"+account+"','"+password+ "')";//插入语句
        try {
            statement.executeUpdate(sql);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

到这里大体上将数据库所需要的函数写完了
随后需要写登录所需的逻辑,因为Android4.0以后不支持在主线程进行耗时操作,因此,如果设备是4.0版本以上的,要新开一条线程操作数据库,同时使用异步处理将操作反馈到界面,即:

handler=new android.os.Handler(){
            public void handleMessage(Message message){
                //异步处理
            }
        };

log_btu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {//按钮点击事件
                    new Thread() {
                        @Override
                        public void run() {
                            //子线程操作
                        }
                    }.start();
                }
        });

最后在账号密码正确的情况下跳转到新的页面,这里为包含传值的Intent显式跳转方法:

Intent intent = new Intent(MainActivity.this, TextActivity.class);
intent.putExtra("list",(Serializable) list);//向下一个页面传值
startActivity(intent);

动态布局由于篇幅的关系就不在此单独写出,请自行上网查找资料,这里只给出示例代码:

LayoutInflater inflater=LayoutInflater.from(this);
LinearLayout text=inflater.inflate(R.layout.text_layout,null).findViewById(R.id.text);

TextView name=text.findViewById(R.id.name);
name.setText(list.get(i));//设置布局里的文字

infobox.addView(text);//添加布局

最后,一定不要忘记在Manifest文件里写入联网权限,否则不能访问云数据库:

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

我写的工程文件如下:
sql.zip

评论已关闭