我正在将应用程序迁移到Realm,我有一个像这样的AsyncTask(为简洁而简化),我用它来搜索对象列表并根据搜索查询对其进行过滤:
private class SearchTask extends AsyncTask<String, Void> {
Realm realm;
@Override
protected List<SearchResults> doInBackground(String... params) {
String searchString = params[0];
realm = Realm.getDefaultInstance();
ArrayList<SearchResults> myFoos = FooHelper.getAllFoo(realm);
ArrayList<Foo> matches = new ArrayList<>();
for (Foo aFoo : myFoos){
if(!aFoo.getProperty().isEmpty()){
matches.add(aFoo);
}
}
realm.close();
return matches;
}
@Override
protected void onPostExecute(List<SearchResults> results) {
super.onPostExecute(results);
synchronized (SearchActivity.this){
//use search results
}
}
}
问题是,当返回结果时,由于它们是在另一个线程上创建的,因此无法访问它们。我能想到的唯一解决方案是从异步任务返回主键数组,然后再次重新查询。
必须有一种更好的方法来基本上在一个领域进行搜索。有什么建议吗?
答案 0 :(得分:0)
直到最近,领域根本不支持异步查询。
您会很高兴知道这已经发生了变化,但您不会通过异步任务来完成此操作。下面是关于如何做的文档: