我有一个显示学生名单的回收站。
所有的学生都被保存在适配器的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-properties04072016更新
RealmList
对RealmResults
:RealmList
是保存为RealmObject
字段的RealmObject
列表。它代表了领域中的一对多关系。RealmResults
是查询的结果。当数据更改时,它们(如果在托管模式下
RealmList
)都将自动刷新。您可以通过以下方式从a
RealmResults
获得aRealmList
:RealmResults results = myRealmList.where().findAll();
这个答案在realm
RealmList.where()
发布后会有点过时,因为新的v0.89.0
。