我有一个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