前言
这学期刚刚开设Android和数据库的课,一直想找一个项目练手,毕竟:纸上得来终觉浅,绝知此事要躬行。只有多敲代码和多学习结合才能提高自己的开发能力。恰好看到了一个页面简洁,功能简单的图书管理系统,于是记录一下自己克隆的过程,也为刚入门的新手提供一个参考。
简介
1.图标
2.登录页面
3.查询页面
教程
1.Book类
很简单的一个kotlin创建类的方式,这里使用的是直接在构造器中定义类的属性,这里再举一个别的例子。
2.DB类
在这里,我们使用了SQlite数据库,在Android Stdio,主要用三种数据库的存储方式。
我们这里主要使用SQLiteOpenHelper,使用的方法是自定义一个DB子类派生自SQLiteOpenHelper,然后重写其onCreate()和onUpdate()方法
这里,我们把需要执行的SQL建表语句定义为了CREATE_BOOK方便以后调用。
如果你对SQLite建表不熟悉,请看:
execSQL()是可以执行insert、delete、update、和createtable之类有更改行为的SQL语句。
3.BookDao
这里是lateinit是延迟初始化,有的时候我们声明的时候无法做到初始化,所以我们使用lateinit关键字来延迟初始化。
这个部分主要是操作数据库。
对于插入,这里涉及到了ContentValues对象,ContentValue提供了put()方法重载,用于向ContentValues添加数据,分别是列名和待添加项,然后调用insert方法,insert()方法有三个参数,分别是表名,为未指定添加数据的某些列赋NULL(一般直接传入null即可),和ContentValues对象。
对于ContentValues()对象,可以看做和HashTable类似的存储机制,但是牵着只能存储基本数据类型,而HashTable可以存储对象。
类似的,还有delete和update ,第一个参数仍然是表名,第二、第三个方法是用于约束某一行或者某几行的数据。
对于查询数据,可以使用query()
这个方法的重载需要用到七个参数,分别是:表名、指定查询列、约束查询行、指定需要用group by的列、用于对group by之后的数据进一步过滤、指定查询结果的排序方式。
在这里,我们只给表名赋值,表示查询所有的数据。返回一个Cursor对象,调用movetoFirst()方法移动到第一行,循坏直到下一行为空。
·关于cursor对象, 大致上可以理解为每行的集合。如何理解这个每行?实际上就是满足我们query方法传入的条件参数的所有行。在遍历所有的cursor内容的时候,一定要首先moveToFirst(),否则cursor的position的值为-1,在表上方,我们需要让他在表内首行,所以使用moveToFIrst(),使用moveToNext()也可以。当cursor无内容的时候,moveToFirst()和moveToNext()会自动返回false
类似的,还有加一个id判断的依据书编号查询。 至此,有关数据库的内容就基本结束。
4LoginActivity MainActivity BookAdapter
这三个类主要完成的就是UI设计、登录功能的实现等等,放在一起说。
布局图如上,都是非常基本的内容,并没有什么复杂的设计。
而在LoginActivity和MainActivity上,还是用了视图绑定(View Binding),用来避免反反复复调用findViewById()。
可以制定所有的XML布局文件生成一个Binding类,完成实例化以后,就可以直接通过与id值相同的属性名直接访问控件。
首先需要在buildFeatures中加入viewBinding true,然后把XML改成驼峰式大小写,并且在末尾加Binding一词,例如activity_main.xml,对应数据绑定的类名为ActivityMainBinding
在启动视图绑定以后,Activity的初始化代码需要略作修改,关键在于实例化视图绑定对象的2实例,然后把根控件传递个Activity
另外,这里有两个activity文件,还使用到了多activity编程。
首先需要修改AndroidManifest.xml,并且注册Activity,然后使用Intent进行activity之间的交流。
对于intent,可以理解为联系各个组件的纽带,可以实现访问外部或者页面组件的跳转。
在MainActivity里,还通过重写onClick方法实现数据库相关各个函数的调用,以及弹出Toast提示用户。
另外,还有Adapter作为数据和视图交互的中介。以及下图中的利用键对值SharedPreferences来存储数据。
具体方法是:首先,实例化SharPreferences对象,然后实例化SharedPreferences.Editor对象,然后采用putString的方法保存数据,用commit提交数据以后,SharedPreferences会把数据保存在test.xml文件中。
保存完后,也可以通过getString方法获取数据。
理论上,这样可以实现登录注册等等功能。
总结
最后,我们就基本完成了这个项目的构建。总而言之,看起来很简单的使用数据库整理图书的小项目做起来却不太容易,实践中往往会遇到一个又一个bug,例如忘记在xml文件中声明activity,图片保存在res中采用了错误的文件名等等。
还是那句,纸上得来终觉浅,绝知此事要躬行。一个小项目往往可以训练到很多知识点的,而且在实践中,往往会得到不一样的体会。
如果需要获取源码,链接:百度网盘 请输入提取码 ,提取码:0c8e