【发布时间】:2018-01-29 03:52:14
【问题描述】:
我搜索了所有互联网以找到一种允许我使用 kotlin 从 assets 文件夹中复制数据库的方法,但是没有,所以请有人知道如何在 kotlin 中进行操作吗?因为我正在做项目,这一步一切都停止了 在此先感谢
【问题讨论】:
-
我希望它使用 kotlin,我尝试将 java 代码转换为 kotlin,但它不起作用,这就是我希望它在 kotlin 中的原因,无论如何谢谢你的帮助
我搜索了所有互联网以找到一种允许我使用 kotlin 从 assets 文件夹中复制数据库的方法,但是没有,所以请有人知道如何在 kotlin 中进行操作吗?因为我正在做项目,这一步一切都停止了 在此先感谢
【问题讨论】:
添加此类以从 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 中显示数据库条目。
【讨论】: