【问题标题】:How do you convert a .realm file to anything else如何将 .realm 文件转换为其他文件
【发布时间】:2023-03-18 21:24:01
【问题描述】:

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

我的问题是,如何将 .realm 文件转换为另一种数据库形式(JSON、CSV)?我正在使用 Windows 10。

【问题讨论】:

标签: json csv realm


【解决方案1】:

因此,经过近 12 个小时的艰苦工作,我终于能够将 .realm 文件中的 RealmObjects 转换为 JSON 文件。并且全部使用 Java!

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

我是这样做的:

  1. 在 android studio 中创建一个新应用(因为 Realm for java 是 android-only)并使用一个简单的活动预设启动它。
  2. 使用 gradle 将 Realm-Java 和 GSON 导入您的应用中
  3. 使用 Realm Studio,在您的领域文件中导出所需的类的 Java 模型定义。 (文件 -> 保存模型定义 -> Java)
  4. 将这些 .java 文件复制到与 MainActivity 相同的文件夹中。我将这些对象的名称称为$YOUR_OBJECT$
  5. 在您的 MainActivity 中,添加

    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. 请特别注意!!你的 RealmObject 不能有任何循环引用。作为其他 RealmObjects 集合的任何类型的字段都计数。如果您的 GSON 对象溢出,那是 100% 的原因。要删除循环引用,请在调用 g.toJson() 之前调用 next.setREFERENCE(null);。

  8. 将您的 .realm 文件放在应用的文件目录中 (data/data/com.app.name/files)

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

这个过程并不完美(你会遇到一些小错误,但它们太小了,我不会写它们),但我希望它能帮助你,就像它会帮助我一样。

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    相关资源
    最近更新 更多