数据存储方案
Android中的数据持久化主要有三种方式 1.文件存储 2.SharedPreferences存储 3.以及数据库存储
文件存储
是Android中最基本的数据存储方式,它不对任何格式化处理,所有数据时原封不动的保存到文件中的,比较适合存储一些简单文本或者二进制数据。
存数据到文件中
需要知道的常识:Android中所有的文件默认存储到/data/data/<包名>/files目录下的
我们创建一个FilePersistenceTest项目:
首先在activiyt_main中添加一个用于接受数据的输入框
其次在MainActivi中编写添加数据,和存储数据的逻辑
运行代码,输入一串文字,通过查看发现数据已经被存储在文件中了
从文件中读取数据
直接修改MainActivity中的代码:
修改onCreate代码:
SharedPreferences存储
SharedPrefernces是基于键值对的方式来存储数据的,当保存一条数据需要提供一个对应的键。读数据可以通过键来得读取
将数据存储到SharedPrederences中
Android中提供了两种获取SharedPreferences对象的方法
1.Context类中的getSharedPrederences()方法
2.Activity类中的getPreferences()方法
创建一个SharedPreferncesTest项目,修改acitivity_main.xml中的代码:
修改MainActivity中的代码:
我们看到数据被存储了进来,此时的数据时被存放在xml里面管理的。
从SharedPreference中读取数据
从Sharedpreference中读取数据其实也非常简单,也会有一系列的api使用,该对象提供了一些列的get方法,用来拿去数据,
我们在上面的项目的基础上,在进行改造,首先修改activity_main.xml的文件,增加一个触发获取数据的按钮
在MainActivity中增加点击事件
运行项目:点击获取数据按钮,查看日志,可以看到拿到了数据
实现记住密码功能
我们来实现一个记住密码的功能,直接沿用我们上次写的强制下线的demo
在activity_main中添加布局,将页面修改你为下图所示:
修改LoginActivity中的代码:
SQLite数据库存储
SQLite是安卓内置的数据库,是一种轻量级的关系型数据库,运算速度非常快。特别适合在移动设备上
创建数据库
在Android系统中,我们继承SQLiteOpenHelper,来实现创建数据库
在activity_main中加入一个按钮,用于触发创建数据库
最后修改MainActivity中的代码:
创建完之后我们可以通过工具查看,
升级数据库
我们发现还有一个onUpgrade数据库,这方法是用于对数据库升级的,首先对MyDatabaseHelper进行修改,
如果我们直接创建表的话,程序会报错,因为之前存在这个表,再次创建的会引起冲突。
然后在MainActivity里面修改对应的版本号,让onUpgrade执行
我们查看DB Browser中可以得到:说明创建成功
添加数据
SQLite中提供了一个insert方法,我们使用例子来说明问题
首先在activity_main中添加按钮,这里创建出来一个按钮用与触发添加数据
然后再MainActivity中写监听事件
我们可以看到数据已经添加进来
更新数据
和插入删除一样,首先先在activity_main.xml中添加一个更新按钮
加入按钮的监听事件:
更新完成
删除数据
SQLiteDatabase中提供了一个delete方法,用于删除数据。我们也是用案例来说明
首先在activity_main.xml中添加一个删除按钮,
然后再MainActivity里面编写对按钮的监听事件
最后我们可以看到数据库里面的数据被删除掉了,
查询数据
我们在实际的案例中,大部分场景都是查询场景,SQLite提供了一个query的方法用于对数据进行查询,这个方法需要传入7个参数,如下
我们通过具体的例子来感受一下:
首先添加一个查询数据的按钮,在activity_main.xml中
在MainActivity中编写监听事件
我们可以看到查询结果
以上,知识简单的用法,之后还有许多更加智能的用法,在后续工作中慢慢练习使用
使用SQL操作数据
其实就是直接编写好对应的SQL,然后放在execSQL方法里面直接即可。我们看下的例子
db.execSQL("insert into Book(name,author,pages,price) values (?,?,?,?)",arrayOf("The Da Vinci Code","Dan Brown","454","16.96"))
更新,删除,查询类似
使用事物
事物,在我们数据库中常用,SQLite也是支持事务的。我来实践一下。
还是现在添加按钮
然后编写监听事件
上面代码中认为制造了一个异常,执行该代码会使得事物执行失败。这样数据不会被我们删除。当我们删除了抛出异常的代码之后,继续执行就会删除掉数据
升级数据库的最佳写法
我们之前在升级数据库的时候,在onUpgrade()方法里面升级,删除原来的数据库,然后再创建一个新的数据库。这一看,非常的不合理。
我们对升级数据库的方法进行一下改造:
如下,当我们用户直接安装第二版本的时候,就直接执行OnCreate中的方法,如果是第一版升级第二版的时候就需要执行onUpgrade()方法
当我们需要升级到第三个版本的时候,就需要在Category的表里面添加几个字段,