0

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

一个问题是,我在 Internet 上找不到返回任何类型值的 AsyncTask 示例。所以我拿了Commonsware书中的例子,修改为返回一个值,得到的值如下:

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

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

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

4

2 回答 2

2

AnAsyncTask不能返回值,因为要获得返回值,您必须在任务完成之前等待。那会让事情变得AsyncTask毫无意义。

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

于 2012-09-17T22:25:08.050 回答
0

此外,如果您想实现更通用的 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 是一个接口,其中一个名为 finished 的函数在 Activity 中实现,就像 onClickListener 一样。

于 2012-09-17T22:34:02.253 回答