Android realmwhere子句返回0,即使realmDB中存在数据
我在android的IntentService中使用where子句,如果我在前7或8次使用where子句,它会给出所需的输出,但在一定时间后失败,结果为0Android realmwhere子句返回0,即使realmDB中存在数据,android,realm,Android,Realm,我在android的IntentService中使用where子句,如果我在前7或8次使用where子句,它会给出所需的输出,但在一定时间后失败,结果为0 Realm realm = Realm.getInstance(ApplicationController.getInstance().getRealmConfig(Constants.SCHEMA_LIVE)); RealmResults<RContactDTO> localContacts = rea
Realm realm = Realm.getInstance(ApplicationController.getInstance().getRealmConfig(Constants.SCHEMA_LIVE));
RealmResults<RContactDTO> localContacts = realm.where(RContactDTO.class).equalTo("operationType", HttpOperation.PUT.name()).findAll();
Utils.Log("update contact count ::: " + localContacts.size(), Utils.LogType.DEBUG);
ArrayList<ContactDTO> contactList = new ArrayList<ContactDTO>();
RContactDTO rContactDTO = null;
for(RContactDTO rContact : localContacts){
contactList.add(new ContactDTO(rContact));
}
Realm Realm=Realm.getInstance(ApplicationController.getInstance().getRealmConfig(Constants.SCHEMA_LIVE));
RealmResults localContacts=realm.where(RContactDTO.class).equalTo(“operationType”,HttpOperation.PUT.name()).findAll();
日志(“更新联系人计数::”+localContacts.size(),Utils.LogType.DEBUG);
ArrayList contactList=新建ArrayList();
RContactDTO RContactDTO=null;
for(RContactDTO rContact:localContacts){
联系人列表。添加(新联系人到(rContact));
}
我通过导出realmDB检查了实际数据。我在Swift中也遇到了同样的问题。域在自动刷新方面有一些问题 使用
realm.refresh()在执行子句之前。在IntentService中,您处于不循环的循环器线程上。这意味着你的领域不能在IntentService的线程上自动更新,也不能等待更改。因此,解决方法是使用普通线程并使用
waitForChange()
而不是IntentService,或者在不再需要域进行操作时关闭域,然后使用getDefaultInstance()
重新打开它,这样就可以运行相同的代码9次,它工作8次,第9次不工作?是的,第9次后它会随机工作,这是不可预测的,在两次尝试之间不会发生任何事情?当我运行一个新的应用程序时,它工作正常,但在一段时间后失败是否可能在“某段时间”内删除了项目?等等,什么?RealmJava在0.90.0中弃用了refresh()
,并在1.0.0中删除了它。这不是一个解决办法。自动刷新在实际循环的循环器线程上工作得很好;而非循环线程将使用waitForChange()
进行更新。