AI智能
改变未来

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

目录

  • 前言
  • 用户注册/登录
  • 新建资金记录
  • 查询当前用户的所有资金记录
  • demo界面展示
  • 后记

前言

最近在写的程序涉及到了用户注册/登录、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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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的时候也比较容易判断是哪个模块出了问题。由于篇幅原因,我并没有在这篇文章中将所有代码一次性贴出,只能麻烦各位小伙伴自己整合啦。稍后我也会将源代码及整个项目文件打包上传,有需要的伙伴可以自行下载。如果有什么问题,可以在下面评论,我会尽量回复大家的。如果大家没有积分的话,可以微信搜索我的个人公众号“茶迁”或者扫描下图,关注后在后台回复“账本”,就可以直接拿到源码啦。我平时也会在公众号发一些编程相关的文章,欢迎大家关注~

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Android开发:基于Android Studio编写一个简单的账本