代码之家  ›  专栏  ›  技术社区  ›  Lukas Strobel

如何转换。域文件到任何其他文件

  •  0
  • Lukas Strobel  · 技术社区  · 7 年前

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

    我的问题是,如何转换。将领域文件转换为另一个数据库表单(JSON、CSV)?我正在使用Windows 10。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Lukas Strobel    7 年前

    因此,经过近12个小时的艰苦工作,我终于能够在我的中转换RealmObjects。将领域文件转换为JSON文件。而且都是Java!

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

    我是这样做的:

    1. 在android studio中创建一个新应用程序(因为java领域仅适用于android),并使用简单的活动预设启动它。
    2. 使用gradle将Realm Java和GSON导入应用程序
    3. 使用Realm Studio,导出Realm文件中类的所需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对象溢出,这就是百分之百的原因。要删除循环引用,请调用 next.setREFERENCE(null); g.toJson() 呼叫

    8. 放置您的。应用程序文件目录中的领域文件( data/data/com.app.name/files )

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

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