【问题标题】:How to copy database from assets folder in android using kotlin [duplicate]如何使用kotlin从android中的资产文件夹复制数据库[重复]
【发布时间】:2018-01-29 03:52:14
【问题描述】:

我搜索了所有互联网以找到一种允许我使用 kotlin 从 assets 文件夹中复制数据库的方法,但是没有,所以请有人知道如何在 kotlin 中进行操作吗?因为我正在做项目,这一步一切都停止了 在此先感谢

【问题讨论】:

  • 我希望它使用 kotlin,我尝试将 java 代码转换为 kotlin,但它不起作用,这就是我希望它在 kotlin 中的原因,无论如何谢谢你的帮助

标签: android kotlin


【解决方案1】:

添加此类以从 Kotlin 中的资产复制数据库:

class AssetDatabaseOpenHelper(private val context: Context) {

companion object {

    private val DB_NAME = "asset_db_name.db"
}

fun openDatabase(): SQLiteDatabase {
    val dbFile = context.getDatabasePath(DB_NAME)


    if (!dbFile.exists()) {
        try {
           val checkDB = context.openOrCreateDatabase(DB_NAME, Context.MODE_PRIVATE,null)

            checkDB?.close()
            copyDatabase(dbFile)
        } catch (e: IOException) {
            throw RuntimeException("Error creating source database", e)
        }

    }
    return SQLiteDatabase.openDatabase(dbFile.path, null, SQLiteDatabase.OPEN_READWRITE)
}

@SuppressLint("WrongConstant")
private fun copyDatabase(dbFile: File) {
    val `is` = context.assets.open(DB_NAME)
    val os = FileOutputStream(dbFile)

    val buffer = ByteArray(1024)
    while (`is`.read(buffer) > 0) {
        os.write(buffer)
        Log.d("#DB", "writing>>")
    }

    os.flush()
    os.close()
    `is`.close()
    Log.d("#DB", "completed..")
}

}

然后使用

从您的活动中打开或创建数据库

val adb = AssetDatabaseOpenHelper(this)

adb.openDatabase()

Log.d("#DB","写作>>");将在 Logcat 中显示数据库条目。

【讨论】:

  • 我在这段代码中有错误 val checkDB = context.openOrCreateDatabase(DB_NAME, null)
  • 我已经编辑了答案,只需检查它并确保您在以下位置使用您的资产数据库名称:“asset_db_name.db”
  • 真的有用,谢谢
猜你喜欢
  • 2013-12-11
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
相关资源
最近更新 更多