【问题标题】:Realm createOrUpdateAllFromJson to create RealmModel objects without persisting?Realm createOrUpdateAllFromJson 创建 RealmModel 对象而不持久化?
【发布时间】:2016-11-30 17:09:37
【问题描述】:

我很高兴在我正在开发的 Android 应用程序中使用领域 Java。我从服务器 API 接收 JSONObject 数组,领域尽职尽责地通过主领域实例对象上的方便 createOrUpdateAllFromJson 摄取它们。

典型的流程如下:

// get API results into JSONArray jsonObjArrs variable
realm.beginTransaction();
realm.createOrUpdateAllFromJson(MyCoolModel.class,jsonObjArrs);
realm.commitTransaction();

但是,我现在遇到了一种情况,我想创建一个临时的内存数组,其中包含相同的 MyCoolModel 对象而不实际上将它们保存到 Realm,因为我想要完成特定用例后立即丢弃这些。在我看来,它像 createOrUpdateAllFromJson,其兄弟方法仅在主领域实例对象上可用。

有什么方法可以将这个方便的JSON 用于对象模型创建者,还是我必须编写一个带有手动/自动 JSON 解析的替代实现?

【问题讨论】:

    标签: java android json realm realm-java


    【解决方案1】:

    如果您想要来自 JSON 结构的内存对象,您应该查看标准 JSON 解析器,例如 GSON、Jackson 或 Moshi。 Realm 没有任何内置方式来执行此操作。

    【讨论】:

    • 对我使用内存领域功能的解决方案有什么想法吗?这与使用 ArrayList 相比如何?
    【解决方案2】:

    一个可笑的hacky解决方案是

    realm.beginTransaction();
    realm.createOrUpdateAllFromJson(MyCoolModel.class,jsonObjArrs);
    List<MyCoolModel> list = realm.copyFromRealm(realm.where(MyCoolModel.class)).findAll());
    realm.cancelTransaction();
    return list;
    

    但你最好使用 LoganSquare(或 GSON/Moshi/etc)

    【讨论】:

      【解决方案3】:

      我最终使用了领域的“内存领域”功能。我编写了一个简单的函数,它将返回一个新的内存领域实例,并以新的 UUID 作为名称:

      public Realm unpersistedRealm(){
          RealmConfiguration myConfig = new RealmConfiguration.Builder()
                  .name(UUID.randomUUID().toString())
                  .inMemory()
                  .build();
          return Realm.getInstance(myConfig);
      }
      

      我将其用作单独创建的实例,仅用于丢弃数据的目的。我使用普通的inMemoryRealmInstance.createOrUpdateAllFromJson() 调用创建对象,并在完成后关闭内存中的实例。我在片段的onCreateView() 调用期间创建实例并关闭onDestroyView() 中的领域。

      继续使用领域(尽管是内存中的实例)给了我以下明显的优势:

      • 在我的MyCoolModel 键字段上使用@PrimaryKey 内置重复数据删除。如果我要使用我之前想到的手动 ArrayList&lt;MyCoolModel&gt; 方法,我将不得不手动删除重复数据,并担心 Realm 已经为我解决的其他问题。
      • 基于查询的排序、过滤等

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-01
        • 1970-01-01
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多