在Android Kotlin项目中正确连接外部领域数据库文件的问题

时间:2019-02-17 12:42:15

标签: database kotlin realm

我想将外部领域数据库连接到我的Android项目。 Realm已在build.gradle中设置。我将测试数据库文件“ realmdata.realm”复制到“ res”中的“ raw”文件夹中。

运行项目会给我错误:

  

由以下原因引起:io.realm.exceptions.RealmFileException:无法解析资产文件的路径:realmdata.realm种类:ACCESS_ERROR。
      ...
          d.androidrealmtestapp.MainActivity.onCreate(MainActivity.kt:40)
      ...

对应于代码行:

realm = Realm.getInstance(c)

无论我更改文件名或“ res”目录中的位置,输出都是一样的。在打印RealmConfiguration之后,输出为:“ realmFileName:default.realm”为什么要使用“ default.realm”,因为我给资产文件指定了名称:“ realmdata.realm”?我究竟做错了什么?所以我的问题是如何正确地将外部领域文件连接到项目?我是Kotlin和Realm的初学者。

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import io.realm.Realm
import io.realm.RealmConfiguration
import io.realm.annotations.RealmModule

class MainActivity : AppCompatActivity() {

private lateinit var mainRecycler : RecyclerView
lateinit var text: String
private lateinit var realm : Realm

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    println("--------------------------------------------- ")
    print(application.assets.toString())

    Realm.init(this)

    var c = RealmConfiguration.Builder()
        .assetFile("realmdata.realm")
        .modules(MyModule())
        .readOnly()
        .build()

    println("--------------------------------------------- ")
    println(" c configuration builder file:")
    println(c)
    println("--------------------------------------------- ")

   Realm.setDefaultConfiguration(c)
   realm = Realm.getInstance(c)

   realm.beginTransaction()
    print ("realm ...")
   realm.commitTransaction()

    mainRecycler = findViewById(R.id.main_recycler)
    mainRecycler.layoutManager = LinearLayoutManager(this)
    mainRecycler.adapter = MainAdapter()

}

@RealmModule(classes = arrayOf(RealmModel::class ))
private class MyModule {}

1 个答案:

答案 0 :(得分:2)

  

我将测试数据库文件“ realmdata.realm”复制到了“ raw”文件夹中   “ res”

您需要将数据库复制到 assets 文件夹

要创建资产文件夹,请执行以下操作。 enter image description here