У вас есть два способа вернуть результат.
Первый способ - вызвать метод AsyncTask.get()
, но он по-прежнему будет удерживать MainThread, что приводит к ANR, если задача будет дольше 5 секунд:
public Targets findTarget (int id) {
return new findTargetByIDAsyncTask(mTargetsDao).execute(id).get();
}
Второй способ более сложный, но он не будет удерживать MainThread. Вы должны добавить класс обратного вызова:
public interface Callback {
void onSuccess(Targets targets);
}
Каждый метод вашего хранилища будет выглядеть так:
public void findTarget (Callback callback, int id) {
new findTargetByIDAsyncTask(mTargetsDao, callback).execute(id);
}
И AsynTask будет выглядеть так:
private static class FindTargetByIDAsyncTask extends AsyncTask<Integer, Void, Targets> {
private final TargetsDao mAsyncTaskDao;
private final Callback callback;
FindTargetByIDAsyncTask(TargetsDao dao, Callback callback) {
mAsyncTaskDao = dao;
this.callback = callback;
}
@Override
protected Targets doInBackground(Integer... integers) {
return mAsyncTaskDao.findTargetById(integers[0]);
}
@Override
protected void onPostExecute(Targets targets) {
callback.onSuccess(targets);
}
}