我有一個AsyncTask,我想在此類的 字段中存儲一些信息。我有這樣的事情:AsynTask字段爲空
public class NFCReaderTask extends AsyncTask<Void, Void, Void> {
private String Year = null;
private String Month = null;
private String Day = null;
@Override
protected void onPreExecute() {
// do some stuff
}
@Override
protected Void doInBackground(Void... params) {
// do some stuff
}
@Override
protected void onPostExecute(final Void unused) {
// do some stuff
// here my fields are filled with all informations
log.v("This First", "" + getYear());
}
public String getYear() {
return Year;
}
public String getMonth() {
return Month;
}
public String getDay() {
return Day;
}
}
在我的活動我這樣做:
public void resolveIntent(Intent intent) {
// ...
NFCReaderTask startReaderTask = new NFCReaderTask(dataDevice);
startReaderTask.execute();
startReaderTask.get();
log.v("This Second", "" + startReaderTask.getYear()); // but this is printed out first
// ...
}
但值均爲空。爲什麼我的字段在我的onPostExecute方法的最後幾行填充了信息 ,但在AsyncTask的.execute() 之後爲空?
編輯:
我加了一些日誌輸出,並注意到了,從我的活動 日誌輸出我的AsyncTask的日誌輸出之前打印出來。這是否意味着 AsyncTask#get()不起作用?
你不應該使用get,因爲它會等待線程完成執行。您還應該1000%不使用您接受的答案,即運行一個while循環,直到AsyncTask停止運行以延遲執行代碼。你應該使用回調。請參閱下面的答案。 – Rarw 2014-10-16 18:06:51
你也不需要也不應該使用getter方法。 AsyncTask異步運行,這意味着它不遵循正常代碼的流程。你不知道什麼時候會回覆答案。因此,獲得者是不合適的,因爲當你打電話給他們時,很可能沒有價值。使用僅在任務完成時觸發的回調/接口解決了這個問題。 – Rarw 2014-10-16 18:32:06