【发布时间】:2019-09-12 16:33:24
【问题描述】:
我已经有一个 SQLite 数据库 (.db) 文件可在特定 URL(假设为 https://mywebsite.com/mydb.db)下载。我想下载这个文件并在我的 Kotlin Android 应用程序中使用它。我可以将文件下载到我的设备模拟器中的“下载”文件夹,但我有几个关于从这里去哪里的问题。
-
我需要将此文件复制到内部存储,还是可以直接从“下载”文件夹中的文件创建数据库?我希望数据库数据保留在本地,因此我不想将数据库文件留在可能会被删除的地方(下载文件夹)。
- 基本上,我希望应用能够从持久的内部
.db文件中读取数据
- 基本上,我希望应用能够从持久的内部
有时,我需要向
.db文件添加更多数据。将来,当我重新下载.db文件并从中创建数据库时,这会覆盖应用程序内部存储中的现有数据库吗?我是否需要手动删除数据库的旧迭代?-
我想在应用程序第一次运行时自动下载
李>.db文件,并且每次我将.db文件的新版本上传到https://mywebsite.com/mydb.db。
总的来说,我对 Android 开发非常陌生,所以我不确定最佳实践是什么。我提供的代码通过单击按钮将我的.db 文件成功下载到“下载”文件夹。从.db 文件创建数据库以及在我将新的.db 文件上传到我的主机 URL 时自动替换数据库方面,我不知道从哪里开始。
private const val PERMISSION_CODE = 1000
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
downloadButton.setOnClickListener {
// Checks if version of Android is >= Marshmallow
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED){
// request permission if denied
requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), PERMISSION_CODE)
}
else {
startDownload()
}
}
else {
// OS is out of date, no permissions are needed
startDownload()
}
}
private fun startDownload() {
val request = DownloadManager.Request(Uri.parse(getString(R.string.db_URL)))
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE)
request.setTitle("my_database.db")
request.setDescription("My database is downloading.")
request.allowScanningByMediaScanner()
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "mydb_" + "${System.currentTimeMillis()}")
val manager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
manager.enqueue(request)
}
【问题讨论】:
标签: android kotlin download android-sqlite android-internal-storage