本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(2)

Android开发:基于Android Studio编写一个简单的账本

发布于2021-06-07 20:29     阅读(726)     评论(0)     点赞(10)     收藏(3)


前言

最近在写的程序涉及到了用户注册/登录、SQLite数据库操作。因此将编写的代码整理了一下,写了一个简易的账本demo。主要功能包括:用户注册/登录、用户新建资金记录(包括金额、时间、用户名)、所有资金记录展示,所有的数据存储都是使用SQLite数据库。目前功能比较粗糙,也欢迎大家一起讨论改进。

用户注册/登录

注册/登录界面的绘制可以看我之前的文章:
Android开发:登录/注册界面的编写
里面对界面的绘制进行了具体的表述。在本文中只贴出Activity中的主要代码。
在这个模块中,编写了两个方法,分别用于查询以当前用户名为索引的信息(包括用户是否存在以及用户的密码),以进行判断;以及向数据库中存储用户信息的表中插入一条新纪录(用于实现注册功能)。
第一个方法:

String queryUser(String Username){
        //查询结果
        String res = "";
        //数据库声明
        SQLiteDatabase mDbUser;
        Cursor Count_cursor;
        //对存储于手机本地的记录进行读取
        mDbUser = openOrCreateDatabase("upCount.db", Context.MODE_PRIVATE, null);
        mDbUser.execSQL("CREATE TABLE IF NOT EXISTS user (_id INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR, password VARCHAR)");
        Count_cursor = mDbUser.rawQuery("SELECT * FROM user WHERE _id >= ?", new String[]{"1"});
        //若查询到当前用户,则退出
        while (Count_cursor.moveToNext()){
            String username = Count_cursor.getString(Count_cursor.getColumnIndex("username"));
            if (username.equals(Username)){
                res = Count_cursor.getString(Count_cursor.getColumnIndex("password"));
            }
        }
        //关闭数据库连接
        Count_cursor.close();
        mDbUser.close();
        return res;
    }

第二个方法:

void createUser(String Username, String Password){
        //数据库声明
        SQLiteDatabase mDbUser;
        //SQLite数据库处理
        mDbUser = openOrCreateDatabase("upCount.db",  Context.MODE_PRIVATE, null);
        mDbUser.execSQL("CREATE TABLE IF NOT EXISTS user (_id INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR, password VARCHAR)");
        mDbUser.execSQL("INSERT INTO user VALUES (NULL, ?, ?)",new Object[]{Username, Password});
        //关闭数据库连接
        mDbUser.close();
    }

点击事件的代码则如下:
(1)“注册”Button:

//点击注册,触发点击事件
        mBtnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取用户输入的账号及密码,传送到服务器进行判断
                Username = mEtUsername.getText().toString();
                Password = mEtPassword.getText().toString();
                //确保用户输入不为空值
                if (Username.equals("")){
                    Toast.makeText(getApplicationContext(), "用户名不能为空!", Toast.LENGTH_SHORT).show();
                }else if(Password.equals("")){
                    Toast.makeText(getApplicationContext(), "密码不能为空!", Toast.LENGTH_SHORT).show();
                }else {
                    if(!queryUser(LoginActivity.Username).equals("")){
                        Toast.makeText(getApplicationContext(), "该用户已存在!", Toast.LENGTH_SHORT).show();
                    }else{
                        createUser(LoginActivity.Username, Password);
                        Toast.makeText(getApplicationContext(), "注册成功!", Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                        startActivity(intent);
                    }
                }
            }
        });

(2)“登录”Button:

//点击登录,触发点击事件
        mBtnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取用户输入的账号及密码,传送到服务器进行判断
                Username = mEtUsername.getText().toString();
                Password = mEtPassword.getText().toString();
                //确保用户输入不为空
                if (Username.equals("")){
                    Toast.makeText(getApplicationContext(), "用户名不能为空!", Toast.LENGTH_SHORT).show();
                }else if(Password.equals("")){
                    Toast.makeText(getApplicationContext(), "密码不能为空!", Toast.LENGTH_SHORT).show();
                }else {
                    //调用用户信息查询方法
                    String rightPassword = queryUser(LoginActivity.Username);
                    if(rightPassword.equals("")){
                        Toast.makeText(getApplicationContext(), "该用户不存在,请注册!", Toast.LENGTH_SHORT).show();
                    }else{
                        if (Password.equals(rightPassword)){
                            Toast.makeText(getApplicationContext(), "登录成功!", Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                            startActivity(intent);
                        }else{
                            Toast.makeText(getApplicationContext(), "密码错误!", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            }
        });

注:在点击事件中,应先对Username和Password进行非空判断,防止用户未输入完整信息就点击按钮,导致向数据库存入非法值。

新建资金记录

新建资金记录包括获取当前系统时间、获取用户输入资金值、向数据库写入数据三部分,具体代码如下:

//记录账单
        mBtnRecord.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取当前时间
                date = new Date(System.currentTimeMillis());
                time = sdf.format(date);
                Toast.makeText(getApplicationContext(), "Current Time:" + time, Toast.LENGTH_SHORT).show();
                //获取用户输入的金额
                String count = mEtCount.getText().toString();
                //SQLite数据库处理
                mDbCount = openOrCreateDatabase("upCount.db",  Context.MODE_PRIVATE, null);
                mDbCount.execSQL("CREATE TABLE IF NOT EXISTS count (_id INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR, time VARCHAR, count VARCHAR)");
                mDbCount.execSQL("INSERT INTO count VALUES (NULL, ?, ?, ?)",new Object[]{LoginActivity.Username, time, count});
                mDbCount.close();
            }
        });

查询当前用户的所有资金记录

在demo中,使用ListView作为记录展示的容器,编写步骤主要包括声明控件、编写适配器(Adapter)等,由于篇幅原因不再赘述,这里只展示涉及数据读取的部分,代码如下:

//对存储于手机本地的记录进行读取
        mDbCount = openOrCreateDatabase("upCount.db", Context.MODE_PRIVATE, null);
        mDbCount.execSQL("CREATE TABLE IF NOT EXISTS count (_id INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR, time VARCHAR, count VARCHAR)");
        Count_cursor = mDbCount.rawQuery("SELECT * FROM count WHERE _id >= ?", new String[]{"1"});
        while (Count_cursor.moveToNext()){
            String username = Count_cursor.getString(Count_cursor.getColumnIndex("username"));
            //if语句:使界面只展示目前登录用户的爬楼梯记录
            if (username.equals(LoginActivity.Username)){
                UpList upList = new UpList();
                upList.setUsername(username);
                upList.setTime(Count_cursor.getString(Count_cursor.getColumnIndex("time")));
                upList.setCount(Count_cursor.getString(Count_cursor.getColumnIndex("count")));
                upLists.add(upList);
            }
        }

实现逻辑是首先使用指针在数据库中遍历对应的表,将表中“username”字段值与当前用户名相同的数据添加到一个集合list中,再通过适配器Adapter在界面进行展示。

demo界面展示

(1)注册/登录界面:
注册/登录界面
(2)主界面:
主界面
(3)记录展示界面:
记录展示界面

后记

上述代码较多,因此建议大家分模块实现功能,这样出现error的时候也比较容易判断是哪个模块出了问题。由于篇幅原因,我并没有在这篇文章中将所有代码一次性贴出,只能麻烦各位小伙伴自己整合啦。稍后我也会将源代码及整个项目文件打包上传,有需要的伙伴可以自行下载。如果有什么问题,可以在下面评论,我会尽量回复大家的。如果大家没有积分的话,可以微信搜索我的个人公众号“茶迁”或者扫描下图,关注后在后台回复“账本”,就可以直接拿到源码啦。我平时也会在公众号发一些编程相关的文章,欢迎大家关注~
茶迁

原文链接:https://blog.csdn.net/weixin_46269688/article/details/117484527



所属网站分类: 技术文章 > 博客

作者:bbjbbh

链接:http://www.phpheidong.com/blog/article/89504/68d3d0fb50c7f7414230/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

10 0
收藏该文
已收藏

评论内容:(最多支持255个字符)