60. (android开发)SQLite作为APP应用的配置打包

虽然可以在APP代码中实现初次运行的时候建立数据库表和表中的数据。但是这样很容易在某次不小心中搞出点bug来。尤其是还把APP的各种配置信息写在SQLite中的,如果发生错误,寻找排查起来可能会非常耗时。那么更好的方式是,把SQLite在发布前就准备好。
首先在开发阶段就建立好SQLite数据库,待完成好数据库表和表中的字段内容后,把这个库文件保存在APP的assets路径中。在这个路径里,可以任意的建立路径深度,并且在代码中可以直接访问。我们只需要在APP运行时候,判断一下私有文件夹或SD卡的指定位置是否有我们需要的配置库就可以了。如果没有,就从assets路径下把配置库复制过来。

为了方便测试,把现有的库当作我们需要的配置库来用。首先在SQLite Expert中修改一下字段内容,以便和将来增加的记录进行区别。
《60. (android开发)SQLite作为APP应用的配置打包》 修改了status状态字段

打开Android Studio找到assets文件夹
《60. (android开发)SQLite作为APP应用的配置打包》 assets文件夹

把数据库文件粘贴进去

《60. (android开发)SQLite作为APP应用的配置打包》 image.png

《60. (android开发)SQLite作为APP应用的配置打包》 image.png

《60. (android开发)SQLite作为APP应用的配置打包》 已经放进去了

在代码中,需要把这个数据库文件复制到指定位置,就写成一个独立的方法吧。每次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="初始化数据库文件" />

《60. (android开发)SQLite作为APP应用的配置打包》 image.png

初次运行后,点击“初始化数据库文件”按钮,再点击“查询记录”按钮,得到运行结果。

《60. (android开发)SQLite作为APP应用的配置打包》 初次运行结果

注意最后的配置信息config

点赞