Android - 领域查询不一致

时间:2015-11-09 20:34:50

标签: android realm

我正在使用最新版本的域,并且存在这种不一致问题:

这行代码:

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()在手表中。 我得到一个列表并检查它的大小。

1 个答案:

答案 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