具有错误处理和进度对话框的通用AsyncTask

时间:2013-04-25 05:08:47

标签: android generics android-asynctask handlers

请告诉我写这篇文章的最佳方式。

我需要一个通用的AsyncTask进行webservice调用,并且所有可能的错误处理都是如此。还有一个用于更新UI /显示错误消息的回调。

我找到了一些approches:

  1. 通过将Generic参数添加到异步任务
  2. 使asynctask成为抽象
  3. 用于处理给出处理程序对象的错误。

2 个答案:

答案 0 :(得分:2)

这实际上很容易使用AsyncTask

AsyncTask有4个功能。其中3个在UI线程上运行,因此您可以根据需要更新UI。其中一个函数在后台运行,因此您可以根据需要执行所需的操作,例如调用您的Web服务。

您不需要正式的回调函数。 AsyncTask.onPostExecute()为您处理此事。

有一个很棒的example in the Android documentation显示了如何下载文件,就像您尝试使用webservices连接一样。您将extend AsyncTask并创建自己的DownloadFilesTask,就像示例中一样。

整个过程只需一行代码即可:

new DownloadFilesTask().execute(...)

这四个功能是:

  • onPreExecute() - 用于显示ProgressBar或其他内容 UI元素。
  • doInBackground() - 只要您愿意,但不要更新 用户界面来自这里。相反,请尽可能多地拨打publishProgress() 喜欢。这将在内部调用onProgressUpdate() 如果需要,可以逐步更新用户界面或ProgressBar
  • onProgressUpdate() - 可选显示进度更新或增量 一个ProgressBar。仅响应调用而调用此函数 来自publishProgress()的{​​{1}}。
  • onPostExecute() - 完成,doInBackground()您的dismiss(),更新 用户界面,处理ProgressBar中保存的所有错误,然后跳转到 代码的下一部分。

错误处理

所有错误都被doInBackground()所困。您应该在doInBackground()班级中保存int errorCode和/或String errorMessage,并在发生错误时从DownloadFilesTask保存return;。然后,处理并报告doInBackground()中的错误。

答案 1 :(得分:0)

有关几个答案,请参阅this question。它们都涉及将doInBackground引发的任何异常存储在字段中并在onPostExecute中进行检查。我喜欢@dongshengcn发布的this answer,它将此封装到AsyncTask的子类中,然后您可以根据需要覆盖onResult和/或onException