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