用Realm实现AsyncTask

时间:2016-05-06 00:04:46

标签: java android realm

我正在将应用程序迁移到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
    }
}

}

问题是,当返回结果时,由于它们是在另一个线程上创建的,因此无法访问它们。我能想到的唯一解决方案是从异步任务返回主键数组,然后再次重新查询。

必须有一种更好的方法来基本上在一个领域进行搜索。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

直到最近,领域根本不支持异步查询。

您会很高兴知道这已经发生了变化,但您不会通过异步任务来完成此操作。下面是关于如何做的文档:

https://realm.io/docs/java/latest/#asynchronous-queries