所以,我有一个使用realm.io的Android应用程序。我必须像这样异步运行查询:在Android中链接领域查询的最佳做法是什么?
public static void getProductsByCategoryId(Realm realm,
String categoryId,
OrderedRealmCollectionChangeListener<RealmResults<Product>> callback) {
RealmResults<Product> result = realm.where(Product.class)
.equalTo(CATEGORY, categoryId)
.findAllAsync();
result.addChangeListener(callback);
}
回调将处理此响应,但随后我需要按顺序运行另一个查询。所以,你将有queryA => process response => queryB => process response。所以,回调可能有这样的代码
.....
getProductsByCategoryId(app.getRealmInstance(), "ABC123", firstCallback);
.....
private OrderedRealmCollectionChangeListener<RealmResults<Product>> firstCallback = new OrderedRealmCollectionChangeListener<RealmResults<Product>>() {
@Override
public void onChange(RealmResults<Product> realmProducts, OrderedCollectionChangeSet changeSet) {
mProdList.addAll(mRealm.copyFromRealm(realmProducts));
// get more product info (2nd call)
MainApplication.getMoreProductInfo(mRealm, mCatId, false, secondCallback);
}
};
目前,我的理解是,你会在queryA的回调中运行queryB?看看应用程序的要求,我最终会得到3或4个查询链。这是一个合适的方法,还是有我应该使用的特定模式?我还没有在Realm文档中找到任何指导。
'这是一个合适的方法不,这种方法大约有三件事是错误的。尽管在后台如果需要4次查询才能获取所有数据,最有可能是设计得不好的架构。 – EpicPandaForce
那么,猜测*为什么你首先需要4个随后的查询*是不可能的。通常为了最佳使用,你不应该从Realm **复制的RealmResults应该来自单个查询,它将以正确的顺序(排序)获得包含所需信息的对象, 。取决于是否有可能*没有*使用4个查询是它自己的问题,并且在从Realm复制时,这可能仅仅是同一个BG线程上的4个同步查询。这样你的RealmResults不会被GC *有时*杀死。 – EpicPandaForce
在过去的SQL数据库日子里,您可以使用内部或外部联接来克服原始数据库设计中未考虑的异常查询,或者您无权创建视图。这种情况今天仍然发生。我用来克服这种情况的一种方法是链接查询。我正在寻找更好的方法。如果你不知道如何解决它,那么它并不一定意味着它不是一个合理的问题。也许这超出了你的技能水平,在这种情况下,把它留给其他人。你已经提出了一个答案,但如果它是一个评论我不能标记 – giulio