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 预打包数据库的主要内容,如果未能解决你的问题,请参考以下文章