我有一个显示学生名单的回收站。
所有的学生都被保存在适配器的realmlist中。
当用户可以请求数据刷新时,服务器会将学生列表发送回用户。
我现在要做的是从服务器下载所有信息,将其存储在数据库中,而不是从数据库中检索(通过realmresults)并将realmresult转换为realmlist。
我的问题是如何正确地更新ui?
我在文档中看到,realmlist有一个托管模式,在这种模式下,它们会自动更新ui。
什么是管理模式?这是什么意思?
如何使用realmlist将其保持在托管状态?
使用realmlits的正确方法(又称最佳实践)是什么?
请注意,我不能将我的信息作为realmresult直接保存,因为我正在对不希望保存的数据执行某些操作。

最佳答案

托管对象与独立对象
独立的RealmObject/RealmList是通过对象的构造函数或Realm.copyFromRealm()方法创建的。独立对象中的数据访问不会经过下划线存储引擎,相反,它的行为与普通对象一样。因此,当数据更改时,独立对象不会刷新。独立对象的示例:

MyModel myModel = new MyModel(); // Standalone

MyModel model = realm.where(MyModel.class).findFirst(); // This is managed object.
MyModel standaloneModel = realm.copyFromRealm(model); // The returned value is standalone object.

MyList myList = new MyList(); // Standalone

托管的RealmObject/RealmList通过realm的底层存储引擎访问数据。它们是在您从realm进行查询或从copyToRealm()返回(及其变量方法)时创建的。像:
MyModel model = realm.where(MyModel.class).findFirst();

MyModel model = new MyModel(); // This is a standalone object.
model = realm.copyToRealm(modle); // The returned value is managed by Realm now.

MyList myList = realm.where(MyModel.class).findFirst().getMyList();

如何正确更新用户界面
建议使用realm的更改侦听器。参阅https://realm.io/docs/java/latest/#notifications
使用RealmList的正确方法(也称为最佳实践)是什么?
这有点让人困惑,但realm正在将RealmCollection引入下一个主要版本(v0.89.0)。参见https://github.com/realm/realm-java/pull/2345
请注意,我不能将我的信息作为realmresult直接保存,因为我正在对不希望保存的数据执行某些操作。
如果RealmList处于管理模式,数据更改也将被保存。如果不希望保存某些数据,可以考虑对这些字段使用@Ignore注释。参阅https://realm.io/docs/java/latest/#ignoring-properties
04072016更新
RealmListRealmResults
RealmList是保存为RealmObject字段的RealmObject列表。它代表了领域中的一对多关系。
RealmResults是查询的结果。
当数据更改时,它们(如果在托管模式下RealmList)都将自动刷新。
您可以通过以下方式从aRealmResults获得aRealmList
RealmResults results = myRealmList.where().findAll();

这个答案在realmRealmList.where()发布后会有点过时,因为新的v0.89.0

09-28 10:08