Как уже упоминалось, вы не можете вернуть значение асинхронно. И я бы посоветовал не использовать статические служебные методы для работы с БД. Кроме того, AsyncTasks громоздки в использовании. Другой вариант - Rx. Например:
@Dao
public interface GenreDao {
@Query("SELECT * FROM Genre")
List<Genre> getAll();
}
public class GenreRepository {
//...
@WorkerThread
public List<Genre> getAll() {
//Any other source management logic could be placed here, i.e. retrieving from cache or network
return genreDao.getAll();
}
}
public class GenreInteractor {
//...
public Single<List<Genre>> getAll() {
return Single
.fromCallable(genreRepository::getAll)
.subscribeOn(Schedulers.io());
}
}
Затем вы получаете список жанров следующим образом:
genreInteractor.getAll().subscribe(genres -> {});
Или, если вы хотите, чтобы ваш обратный вызов был в основном потоке:
genreInteractor.getAll().observeOn(AndroidSchedulers.mainThread()).subscribe(genres -> {});