我调用AsyncTask方法从房间数据库中检索条目。我在AsyncTask中这样做是为了不阻塞UI线程。在我的doInBackGround方法中,我为对象分配了一个值,我们可以在这里看到它被设置了:
在我的帖子执行中,我调用了一个使用该对象的方法。但是它将分配为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();
}
}
我得到的错误是空对象引用,但是以前分配它时又如何?有更好的方法吗?
答案 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;