查找给定Realm架构的Java类

时间:2017-01-14 20:43:45

标签: java realm

Realm对象上,我调用getSchema().getAll()来获取可用的模式,然后调用模式上的getClassName()来获取其名称。

我如何随后读取该架构的数据,即查询它所拥有的Java对象?我试过在where(<class>).findAll()对象上调用Realm,但是where()期望一个类型是有问题的Java类的参数,我还没有找到一种方法来确定只给出类的类架构名称。请注意,RealmObjectSchema.getClassName会返回一个不符合此目的的非限定名称。

所以基本上问题是如何找到与模式对应的Java类。我可以在classToTable的{​​{1}}和classToSchema字段中看到这些信息。

或者RealmSchema可能不是检索数据的最佳方法吗?

2 个答案:

答案 0 :(得分:1)

有可能依靠一些包内部API,RealmProxyMediator来获取类:

RealmProxyMediator mediator = realm.configuration.getSchemaMediator();
final Set<Class<? extends RealmModel>> modelClasses = mediator.getModelClasses();

但根据Realm 0.88.0更改日志:

  

从0.86.0中弃用的公共API中删除RealmConfiguration.getSchemaMediator()。请使用RealmConfiguration.getRealmObjectClasses()获取模型类集(#1797)。

所以只需使用RealmConfiguration.getRealmObjectClasses()

  

getRealmObjectClasses()

     

public Set<Class<? extends RealmModel>> getRealmObjectClasses()

     

返回构成此Realm架构的不可修改的模型类集。

然后,您可以对其进行迭代,并使用集合中为class参数返回的where(class) es。

答案 1 :(得分:0)

这可能已经很晚了,但是由于我相信这里存在同样的问题,我为在领域(为了某些记录目的)遍历所有模型所做的工作(不禁用混淆)是

realm.configuration.realmObjectClasses.forEach {
                    val realmClassName = realm.where(it).typeQueried
                    val numberOfRecords = realm.where(it).count()

                }

由于我能够获得原始的类名(或至少在我使用RealmNamingPolicy.LOWER_CASE_WITH_UNDERSCORES时具有某种可读性的版本),并且仍然存在混淆之处