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