Android 在域中加载对象的单个字段
假设我有一个Book对象(id、姓名、作者) 假设我有一个很大的图书列表,是否可以只检索这些图书的名称而不检索整个对象 假设我有一个很大的图书列表,是否可以只检索这些图书的名称而不检索整个对象 当然可以,请看:Android 在域中加载对象的单个字段,android,realm,Android,Realm,假设我有一个Book对象(id、姓名、作者) 假设我有一个很大的图书列表,是否可以只检索这些图书的名称而不检索整个对象 假设我有一个很大的图书列表,是否可以只检索这些图书的名称而不检索整个对象 当然可以,请看: private RealmChangeListener<RealmResults<Book>> listener = (results) -> { adapter.updateData(results); }; RealmResults<Bo
private RealmChangeListener<RealmResults<Book>> listener = (results) -> {
adapter.updateData(results);
};
RealmResults<Book> books;
void blah() {
books = realm.where(Book.class).findAllAsync();
books.addChangeListener(listener);
}
这样做的原因是,虽然RealmResults计算“如何访问给定对象”,但实际上通过调用book.getName()
只加载书籍的名称
基本上,托管RealmObjects是延迟访问的,并且当调用给定属性的访问器时,领域本身只加载给定的对象属性:在本例中,book.getName()
至于获取
列表
,不太可能。这将从每个对象读取属性。也许我不需要将书籍传递给适配器,而只需将名称添加到列表中?另外,是否需要在“addChangeListener”中执行此操作?为什么不是一个普通的查询呢?这是一个普通的查询,一个异步的查询。如果您通过迭代列表来提取List
,那么您将急切地读取每个字符串,而不是在访问对象的属性时。无论这是不是你想要的取决于你的个人需求,ofc。虽然我不建议在UI线程上这样做。如果您使用的是我的库monary
,那么您将执行findallappedwithchanges
,并接收LiveData
。是的,我需要一个完整的列表来操作,因此对结果进行迭代是否只加载名称而不加载整个对象?谢谢技术上是的。
public class MyAdapter extends ___Adapter {
...
public class ViewHolder /* ... */ {
public void bind(Book book) {
bookName.setText(book.getName());
}
}
}