Java 为什么我的对象没有在AsyncTask中设置?
我调用AsyncTask方法从我的房间数据库中检索条目。我在异步任务中这样做是为了不阻塞UI线程。在我的doInBackGround方法中,我为对象指定了一个值,我们可以在这里看到它被设置: 在post execute中,我调用了一个使用此对象的方法。但它赋值为null,程序失败 为什么我在doInBackground中分配的这个值在我想用另一种方法访问时不存在 异步任务 callOnChangedJava 为什么我的对象没有在AsyncTask中设置?,java,android,android-asynctask,Java,Android,Android Asynctask,我调用AsyncTask方法从我的房间数据库中检索条目。我在异步任务中这样做是为了不阻塞UI线程。在我的doInBackGround方法中,我为对象指定了一个值,我们可以在这里看到它被设置: 在post execute中,我调用了一个使用此对象的方法。但它赋值为null,程序失败 为什么我在doInBackground中分配的这个值在我想用另一种方法访问时不存在 异步任务 callOnChanged 我得到的错误是一个空对象引用,但是当我以前分配它时,它是如何得到的呢?有更好的方法吗 设法让它工
我得到的错误是一个空对象引用,但是当我以前分配它时,它是如何得到的呢?有更好的方法吗 设法让它工作起来。我没有在callOnChanged中检索它,而是在执行后将其作为参数传递给callOnChanged,AtcUser不再为null 异步任务
我认为在doinbackground中mAtcDao为null只需运行一个if条件,声明ifmAtcDao==null{Toast.MakeTextIt's null}如果mAtcDao不是null,还可以尝试检查atcUserStats回调在哪里实现?我看到您每次都在创建一个新回调。@Mr.Patel mAtcDao不为空。@CodeDaily什么回调?callOnChanged只是我用来将数据存储到数据库的另一个类中的一个方法。如果我能克服这个错误,我会的。atcUserStats呢?
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;
}
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();
private class getAtcUserAsyncTask extends AsyncTask<Void, Void, Void> {
String name;
getAtcUserAsyncTask(String name) {
this.name = name;
}
@Override
protected Void doInBackground(Void... params) {
setAtcUserStats(mAtcDao.findByName(name));
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
ATC_GameOver atc_gameOver = new ATC_GameOver();
atc_gameOver.callOnChanged(atcUserStats);
}
}
private void setAtcUserStats(AtcUserStats byName) {
atcUserStats = byName;
}
public void callOnChanged(AtcUserStats atc_user) {
mRepository = new UsersRepository(app);
AtcUser = atc_user;