我正在使用最新版本的域,并且存在这种不一致问题:
这行代码:
realm.where(Realm_Building.class).findAll()
返回166个元素的列表或零元素。 我有几十个api请求一个接一个地使用这个代码而不改变数据库中的任何内容。
可能导致这种情况的原因是什么?
修改
这是整个功能:
public Building getBuilding(String buildingInternalId) {
Building building = null;
Realm realm = Realm.getInstance(realmConfig_data);
Realm_Building realm_building =
realm.where(Realm_Building.class).equalTo("internalId",
buildingInternalId).findFirst();
if (realm_building != null){
building = new Building(realm_building);
building.setMachines(getMachines(building.getInternalId()));
}
return building;
}
这一行 - realm.where(Realm_Building.class).findAll()在手表中。 我得到一个列表并检查它的大小。
答案 0 :(得分:0)
你最有可能打电话
public Building getBuilding(String buildingInternalId) {
Building building = null;
Realm realm = Realm.getInstance(realmConfig_data);
此方法在非looper后台线程上,但您实际上从未关闭此Realm实例。
因此,您的后台线程在打开第一个实例后将永远不会释放它所拥有的Realm版本,并且永远无法更新。所以你会体验版本保留。
解决方案:在线程开头打开Realm,在线程结束时关闭它。
相关文档:https://realm.io/docs/java/latest/#closing-realm-instances
// Run a non-Looper thread with a Realm instance. Thread thread = new Thread(new Runnable() { @Override public void run() { Realm realm = Realm.getDefaultInstance(); try { // ... Use the Realm instance ... } finally { realm.close(); } } }); thread.start();
如果其他所有方法都失败了,您可以force a refresh after you obtain the instance。