在Realm
对象上,我调用getSchema().getAll()
来获取可用的模式,然后调用模式上的getClassName()
来获取其名称。
我如何随后读取该架构的数据,即查询它所拥有的Java对象?我试过在where(<class>).findAll()
对象上调用Realm
,但是where()
期望一个类型是有问题的Java类的参数,我还没有找到一种方法来确定只给出类的类架构名称。请注意,RealmObjectSchema.getClassName
会返回一个不符合此目的的非限定名称。
所以基本上问题是如何找到与模式对应的Java类。我可以在classToTable
的{{1}}和classToSchema
字段中看到这些信息。
或者RealmSchema
可能不是检索数据的最佳方法吗?
答案 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
时具有某种可读性的版本),并且仍然存在混淆之处