如何将.Realm文件转换为其他任何内容



我有一个我想从中访问数据的领域数据库文件。我从手机上的应用程序中提取了它。不幸的是,我想以超出Realm Studio的能力的方式来玩弄数据。

我的问题是,如何将.REALM文件转换为另一个数据库表单(JSON,CSV(?我正在Windows 10上工作。

因此,经过近12个小时的艰苦工作,我终于能够将.Realm文件中的roelemobjects转换为JSON文件。全部在Java!

此过程适用于.Realm文件中的一个模型定义。

这是我的做法:

  1. 在Android Studio中创建一个新的应用程序(因为Java领域是仅Android的(,并以简单的活动预设开始。
  2. 使用Gradle将Realm-Java和Gson导入您的应用程序
  3. 使用Realm Studio,导出您领域文件中类所需的Java模型定义。(文件 ->保存模型定义 -> Java(
  4. 将这些.java文件复制到与您的MainActivity相同的文件夹。我将这些对象的名称称为 $YOUR_OBJECT$
  5. 在您的主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()方法。

  6. 替换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();
            }
    
  7. 要特别注意!您的领域对象一定不具有任何循环引用。任何类型的字段都是其他领域的集合。如果您的GSON对象溢出,那就是100%的原因。要删除圆形参考,请在g.toJson()调用之前致电next.setREFERENCE(null);

  8. 将.Realm文件放在应用程序目录(data/data/com.app.name/files(

  9. 启动应用程序并按下按钮。您的output.json将与.realm文件同一目录生成。

这个过程并不完美(您会遇到一些较小的错误,但是它们是如此的次要,我不会写关于这些错误(,但我希望它能对您有所帮助,就像它会帮助我。

相关内容

最新更新