我在使用领域时遇到问题。
findAll 和 findAllAsync 不会从领域返回任何数据。
我正在像这样从主线程更新领域对象。
public void updatePhoto(final int ticketID) {
realm.beginTransaction();
RealmResults ticketPhotos = realm.where(TicketPhoto.class).equalTo("TicketID", ticketID).findAll();`
for (TicketPhoto ticketPhoto : ticketPhotos) {
ticketPhoto.IsModified = true;
}
realm.commitTransaction();
} '$'
同时,一个后台服务每五分钟运行一次,并不断检查 IsModified 标志为 true 的任何对象。从我的后台服务(IntentService)中,我使用 AsyncTask 并在 doInBackground 中,尝试获取这些 IsModified 记录,我认为领域应该选择这些记录并使用我的服务器进行更新。使用以下代码从领域获取数据。
public RealmResults getTicketPhotosToSave (){
return realm.where(TicketPhoto.class)
.equalTo("IsModified", true)
.findAll();
}
当我仍在同一个照片活动中,将照片保存到 IsModified 标志为 true 的领域时,后台服务中的领域不会选择这些记录。但是,当我销毁该应用程序并再次运行它时,服务现在正在选择这些记录。我不确定我在这里是否做错了什么。
它的工作。感谢您的支持
现在我明白了,除非我们在同一线程上更新数据,否则不需要关闭领域。
当我们需要访问不同线程中的这些更改时,我们始终需要关闭领域。
由于后台线程始终需要访问所有对象,因此我们必须在访问数据之前关闭并打开领域。
因此,在访问/查询数据之前,我按照 @Zhuinden 建议刷新领域(领域未获取数据 https://stackoverflow.com/questions/39600315/realm-not-fetching-data/39604016#39604016)
然后是realm.Close()。之后我创建实例 (realm = Realm.getDefaultInstance(); )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)