从 AsyncTask 获取结果



我正在尝试使用 AsyncTask 下载字符串并返回字符串。 我想使用AsyncTask,因为它可能需要一段时间。

一个问题是,在互联网上找不到返回任何类型值的AsyncTask示例。 所以我在 Commonsware 书中举了一个例子,并对其进行了修改以返回一个值,我得到的值如下:

String mystr = new AddStringTask().execute().get();

虽然这有效,但似乎这行代码正在等待返回值,因此是同步的。 必须有某种方法可以使用 AddStringTask 的结果来触发事件触发器。

这是怎么做到的?谢谢,加里

AsyncTask不能返回值,因为要获取返回的值,您必须等待任务完成。这将使AsyncTask变得毫无意义。

相反,您应该将代码移动到onPostExecute()(如果您担心的是,它在 UI 线程上运行)。这是处理doInBackground()返回的值的位置,通常会更新 UI 或显示错误消息。

此外,如果您想实现更通用的 AsyncTask,您可以实现如下所示的内容来划分活动内的代码。

@Override
protected void onPostExecute(Bitmap r){
    if (r != null) {
        processListeners(r);
    }
}
protected void processListeners(Object data) {
    for (final AsyncTaskDone l : listeners) l.finished(data);
}
public void addAsyncTaskListener (final AsyncTaskDone l){
    listeners.add(l);
}

其中 AsyncTaskListener 是一个接口,其中一个名为 done 的函数在活动中实现的方式与 onClickListener 相同。

最新更新