从AsyncTask获取结果

时间:2012-09-17 22:16:56

标签: android android-asynctask commonsware

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

一个问题是我无法在互联网上找到返回任何类型值的AsyncTask的示例。所以我在Commonsware书中拿了这个例子并修改它以返回一个值,我得到的值如下:

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

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

怎么做的? 谢谢,加里

2 个答案:

答案 0 :(得分:2)

AsyncTask无法返回值,因为要获取返回的值,您必须在任务完成之前等待。这会使AsyncTask毫无意义。

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

答案 1 :(得分: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相同的方式实现。