2016-05-06 7 views
0

Я мигрирующие приложения к Realm и у меня есть AsyncTask как это (упрощенный для краткости), который я использовал для поиска по списку объектов и фильтровать его на основе поискового запроса:Реализация AsyncTask с Realm

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 
    } 
} 

}

проблема заключается в том, что, когда возвращаются результаты, которые они не могут быть доступны, так как они были созданы в другом потоке. Единственное решение, о котором я могу думать, это вернуть массив первичных ключей из задачи async, а затем повторно запросить их снова.

Должен быть лучший способ в основном выполнять ПОИСК по царству. Какие-либо предложения?

ответ

0

До недавнего времени регион не поддерживал асинхронные запросы вообще.

Вы будете рады узнать, что это изменилось, но вы не делаете этого с помощью async-задачи. Heres документация о том, как это сделать:

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

+0

Интересно ... Одна проблемы, что я с помощью запросов является то, что у меня есть массив контактов с ПгвЬЫатом и LastName и я хочу, чтобы искать на полное имя (которое не является свойством RealmObject). Раньше в моей AsyncTask я просто присоединился к первой и последней в другую строку, такую ​​как «First Last», чтобы я мог сопоставляться с запросом типа «Первый L», и он все равно будет соответствовать. Является ли способ «Царства» сделать это только для создания новой переменной на объекте с именем fullName? Кажется, это слишком много. –

Смежные вопросы