我有一个我想从中访问数据的领域数据库文件。我从手机上的应用程序中提取了它。不幸的是,我想以超出Realm Studio的能力的方式来玩弄数据。
我的问题是,如何将.REALM文件转换为另一个数据库表单(JSON,CSV(?我正在Windows 10上工作。
因此,经过近12个小时的艰苦工作,我终于能够将.Realm文件中的roelemobjects转换为JSON文件。全部在Java!
此过程适用于.Realm文件中的一个模型定义。
这是我的做法:
- 在Android Studio中创建一个新的应用程序(因为Java领域是仅Android的(,并以简单的活动预设开始。
- 使用Gradle将Realm-Java和Gson导入您的应用程序
- 使用Realm Studio,导出您领域文件中类所需的Java模型定义。(文件 ->保存模型定义 -> Java(
- 将这些.java文件复制到与您的MainActivity相同的文件夹。我将这些对象的名称称为
$YOUR_OBJECT$
-
在您的主activity中,添加
Realm.init(this); RealmConfiguration config = new RealmConfiguration.Builder() .assetFile(getFilesDir().getPath() + "/NAME_OF_REALM_FILE.realm") .name("NAME_OF_REALM_FILE.realm") .schemaVersion(30) .build(); Realm.setDefaultConfiguration(config); final Realm realm = Realm.getInstance(config); final Gson g = new Gson();
到
onCreate()
方法。 -
用
替换onClick(View view)
的内容try { File output = new File(getFilesDir(), "output.json"); BufferedWriter writer = new BufferedWriter(new FileWriter(output, true)); RealmResults results = realm.where($YOUR_OBJECT$.class).findAll(); Iterator<$YOUR_OBJECT$> iterator = results.iterator(); writer.write("{"Output": {"); while (iterator.hasNext()) { $YOUR_OBJECT$ next = realm.copyFromRealm(iterator.next()); writer.write(""" + <PUT SOMETHING HERE, LIKE AN ID> + "": "); writer.write(g.toJson(next)); writer.write(","); } writer.write("}}"); writer.close(); } catch (Exception e) { e.printStackTrace(); }
-
要特别注意!您的领域对象一定不具有任何循环引用。任何类型的字段都是其他领域的集合。如果您的GSON对象溢出,那就是100%的原因。要删除圆形参考,请在
g.toJson()
调用之前致电next.setREFERENCE(null);
。 -
将.Realm文件放在应用程序目录(
data/data/com.app.name/files
(
中 启动应用程序并按下按钮。您的output.json将与.realm文件同一目录生成。
这个过程并不完美(您会遇到一些较小的错误,但是它们是如此的次要,我不会写关于这些错误(,但我希望它能对您有所帮助,就像它会帮助我。