为什么未在AsyncTask中设置我的对象?

时间:2019-05-14 16:54:26

标签: java android android-asynctask

我调用AsyncTask方法从房间数据库中检索条目。我在AsyncTask中这样做是为了不阻塞UI线程。在我的doInBackGround方法中,我为对象分配了一个值,我们可以在这里看到它被设置了:

enter image description here

在我的帖子执行中,我调用了一个使用该对象的方法。但是它将分配为null,程序将失败。

当我想用其他方法访问时,为什么在doInBackground中分配的这个值没有持久化?

AsyncTask

error

检索分配的值

describe('increase the counter', () => {
  it('spam click by 10', () => {
    for(let n = 0; n < 10; n ++){
      cy.get('[data-cy=click-up]').click()
    }
  })
})

callOnChanged

 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();
    }
}

我得到的错误是空对象引用,但是以前分配它时又如何?有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

已对其进行了管理。我没有在callOnChanged中检索它,而是在执行后将它作为参数传递给callOnChanged,并且AtcUser不再为空。

AsyncTask

 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;
}

callOnChanged

public void callOnChanged(AtcUserStats atc_user) {


    mRepository = new UsersRepository(app);
    AtcUser = atc_user;