Realm Java 预打包数据库

Posted

技术标签:

【中文标题】Realm Java 预打包数据库【英文标题】:Realm Java prepackaged database 【发布时间】:2015-03-26 17:47:24 【问题描述】:

我正在尝试将一个预加载的 Realm 数据库放入我的应用程序中。

我在做什么:

    我创建了一个简单的应用程序,将数据从 JSON 加载到 Realm 数据库 (default1.realm)。

    我有我的实际应用程序,我试图将加载程序创建的 default.realm 文件放在 res/raw 文件夹中,并使用迁移示例 copyBundledRealmFile() 函数将 default.realm 复制到 getFilesDir( )。

    完成这一切之后,当我尝试执行 Realm.getInstance() 时,会返回一个空的 Realm。

我做错了什么?

String path3 = copyBundledRealmFile(this.getResources().openRawResource(R.raw.default1), "default.realm");

Realm r1 = Realm.getInstance(this);

r1 应该指向我复制的文件,对吧?

更新:我找到了无法访问数据库的原因:

03-27 10:27:50.965  17750-17750/? A/art﹕ art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: 
input is not valid Modified UTF-8: illegal continuation byte 0x2e
03-27 10:27:50.965  17750-17750/? A/art﹕ art/runtime/check_jni.cc:65]     string: 'Unspecified exception. 
Failure when converting long string to UTF-16 error_code = 2; retcode = 0; StringData.size = 40487; StringData.data = etc..

03-27 10:27:50.965  17750-17750/? A/art﹕ art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: 
input is not valid Modified UTF-8: illegal continuation byte 0x2e
03-27 10:27:50.965  17750-17750/? A/art﹕ art/runtime/check_jni.cc:65]     string: 'Unspecified exception. 
Failure when converting long string to UTF-16 error_code = 2; retcode = 0; StringData.size = 40487; StringData.data =

我现在的问题是为什么会发生这个错误?

【问题讨论】:

您使用的是哪个版本的 Realm? 0.80.0.仅当我在调试并希望在调试器中查看结果时才会出现此问题。也可能来自 android Studio。 我可以看到您正在使用 ART。你在使用 Dalvik 时会遇到同样的错误吗? 【参考方案1】:

您说您的文件名为default.realm,但您在上面的sn-p 中将其称为default1。如果您尝试使用default,它是否有效?

【讨论】:

我刚刚更正了我的帖子,对此感到抱歉。我取得了一些进展,我删除了导致上述错误的字符,但出现了另一个:我正在调试 Realm 源代码,并且在执行 initializeRealm(realm) 时(Realm.java 中的第 529 行)我可以看到其中的数据该文件,同时 Realm 正在检查表和字段名。但之后返回的 Realm 对象没有表,什么都没有。 您的 Realm 文件似乎已损坏。打包时文件是否被压缩,并且您正在打开压缩的 Realm 文件?压缩的 Realm 文件看起来像一个损坏的文件。 没有压缩。 打包后如何查看文件是否损坏?有办法吗? 打开一个 Realm 文件可能是最好的办法。正如上面的日志显示的那样,你有一个长度为 40487 的字符串,我最好的猜测是打包你的应用程序时出了点问题。

以上是关于Realm Java 预打包数据库的主要内容,如果未能解决你的问题,请参考以下文章

房间数据库 预打包的数据库的架构无效

例外:预打包的数据库具有无效的架构

Android Room 将预打包的数据库存储在缓存中是不是正常?

My Realm不会将新数据更新到realm数据库

Android Realm数据库使用

java Android:使用Realm.io数据库的AutoCompleteTextView