Java 为什么我的对象没有在AsyncTask中设置?

Java 为什么我的对象没有在AsyncTask中设置?,java,android,android-asynctask,Java,Android,Android Asynctask,我调用AsyncTask方法从我的房间数据库中检索条目。我在异步任务中这样做是为了不阻塞UI线程。在我的doInBackGround方法中,我为对象指定了一个值,我们可以在这里看到它被设置: 在post execute中,我调用了一个使用此对象的方法。但它赋值为null,程序失败 为什么我在doInBackground中分配的这个值在我想用另一种方法访问时不存在 异步任务 callOnChanged 我得到的错误是一个空对象引用,但是当我以前分配它时,它是如何得到的呢?有更好的方法吗 设法让它工

我调用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;