虽然可以在 APP 代码中实现初次运行的时候建立数据库表和表中的数据。但是这样很容易在某次不小心中搞出点 bug 来。尤其是还把 APP 的各种配置信息写在 SQLite 中的,如果发生错误,寻找排查起来可能会非常耗时。那么更好的方式是,把 SQLite 在发布前就准备好。
首先在开发阶段就建立好 SQLite 数据库,待完成好数据库表和表中的字段内容后,把这个库文件保存在 APP 的 assets 路径中。在这个路径里,可以任意的建立路径深度,并且在代码中可以直接访问。我们只需要在 APP 运行时候,判断一下私有文件夹或 SD 卡的指定位置是否有我们需要的配置库就可以了。如果没有,就从 assets 路径下把配置库复制过来。
为了方便测试,把现有的库当作我们需要的配置库来用。首先在 SQLite Expert 中修改一下字段内容,以便和将来增加的记录进行区别。
修改了 status 状态字段
打开 Android Studio 找到 assets 文件夹
assets 文件夹
把数据库文件粘贴进去
image.png
image.png
已经放进去了
在代码中,需要把这个数据库文件复制到指定位置,就写成一个独立的方法吧。每次 onCreate 的时候调用一下。
代码如下
- /**
- * Cofox 系统参数数据库初始化
- * created at 2018/1/7 17:54
- * 功能描述:
- * file:SQLiteActivity.kt
- *
- *
- * 修改历史:
- * 2018/1/7:
- *
- */
- fun appParamConfig(fileName:String){
- /**目标文件*/
- val file = File(fileName)
- //如果文件不存在就复制
- if (!file.exists()){
- //获取数据库文件的InputStream对象
- val inputStream = resources.assets.open("cofoxTest.db")
- val fos = FileOutputStream(fileName)
- val buffer = ByteArray(100)
- var count = 0
- while (true){
- count = inputStream.read(buffer)
- if (count < 0){
- break
- }
- fos.write(buffer, 0, count)
- }
- fos.close()
- inputStream.close()
- }
- }
然后我们在界面上增加一个按钮,并把按钮的操作写为触发这个方法。
- //初始化数据库文件
- btnSQLiteDbFileInit.setOnClickListener {
- appParamConfig(fileName)
- }
- <Button
- android:id="@+id/btnSQLiteDbFileInit"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="初始化数据库文件" />
image.png
初次运行后,点击 "初始化数据库文件" 按钮,再点击 "查询记录" 按钮,得到运行结果。
初次运行结果
注意最后的配置信息 config
来源: http://www.jianshu.com/p/fa4a2c121c0e