Я вызываю метод AsyncTask, чтобы получить запись из базы данных моей комнаты. Я делаю это в AsyncTask, чтобы не блокировать поток пользовательского интерфейса. В моем методе doInBackGround я присваиваю объекту значение, и мы видим, что он установлен:
В моем посте execute я вызываю метод, который использует этот объект. Но он присваивается как ноль, и программа завершается ошибкой.
Почему это значение, которое я присвоил в doInBackground, не сохранилось, когда я хочу получить доступ другим методом?
AsyncTask
void getAtcUser(String username) {
new getAtcUserAsyncTask(username).execute();
}
private class getAtcUserAsyncTask extends AsyncTask<Void, Void, Void> {
String name;
getAtcUserAsyncTask(String name) {
this.name = name;
}
@Override
protected Void doInBackground(Void... params) {
atcUserStats = mAtcDao.findByName(name);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
ATC_GameOver atc_gameOver = new ATC_GameOver();
atc_gameOver.callOnChanged();
}
}
Получить присвоенное значение
public AtcUserStats getAtcUserStats(){
return atcUserStats;
}
callOnChanged
public void callOnChanged() {
mRepository = new UsersRepository(getApplication());
AtcUser = mRepository.getAtcUserStats(); //Assgins null here - then program fails when I try access this object on the next line
int singlesPlayed = AtcUser.getSinglesPlayed();
Ошибка, которую я получаю, является пустой ссылкой на объект, но как, если я назначил ее ранее? Есть ли лучший способ сделать это?