2013-04-25 43 views
1

請告訴我最好的方式來寫這個。通用AsyncTask錯誤處理和進度對話框

我需要一個通用的AsyncTask進行webservice調用,所有可能的errror處理。還有一個更新UI /顯示錯誤消息的回調。

我發現幾個approches:

  1. 加入通用參數異步任務
  2. 製作的AsyncTask是抽象
  3. 處理錯誤給處理對象。

回答

2

這實際上很容易做到AsyncTask

AsyncTask有4個功能。其中3個在UI線程上運行,因此您可以根據需要更新UI。其中1個函數在後臺運行,因此您可以根據需要執行一些操作,例如調用webservice。

您不需要正式的回調函數。 AsyncTask.onPostExecute()爲您處理。

有一個很棒的example in the Android documentation,它顯示瞭如何嘗試使用web服務連接完全下載文件。您將會像extend AsyncTask一樣創建您自己的DownloadFilesTask,就像在示例中一樣。

整個事情是開始的一行代碼:

new DownloadFilesTask().execute(...) 

四個功能是:

  • onPreExecute() - 有用用於顯示ProgressBar或其它 UI元素。
  • doInBackground() - 只要你願意,但不要從這裏更新 的用戶界面。相反,請撥打publishProgress(),就像您經常撥打 一樣。如果需要,這將在內部調用onProgressUpdate(),您可以在其中 逐步更新UI或ProgressBar
  • onProgressUpdate() - 可選的顯示進度更新或增量 a ProgressBar。此功能僅在響應從doInBackground()呼叫 publishProgress()而被調用。
  • onPostExecute() - 完成,dismiss()ProgressBar,更新 的UI,保存在doInBackground()過程中的任何錯誤,並跳轉到 代碼的下一節。

錯誤處理

所有錯誤都被困在doInBackground()。當發生錯誤時,您應該在DownloadFilesTask級別中保存int errorCode和/或String errorMessage,在doInBackground()保存return;。然後,處理並報告onPostExecute()中的錯誤。

+0

請提出建議。對任何要求,回答,例外情況進行一般處理 – 2013-04-25 05:53:21

+0

感謝您的全力幫助;我已經做了同樣的事情。但我需要一個更好的模塊化sacalable的接近。 – 2013-04-25 06:30:28

+0

將你的'DownloadFilesTask'變成一個單獨的類(即在另一個Java文件中)傳遞URL等,並且通過訪問函數返回一個String,XML Object,JSON。還提供'getErrorCode()'和'getErrorMessage()'。我明白,這可能不是您正在尋找構建可重用組件的確切模塊化拼圖塊,但它可以從您的問題中有限的文本中完成。 – 2013-04-25 06:36:47

0

請參閱this question的幾個答案。它們都涉及在場中存儲由doInBackground引發的任何異常,並在onPostExecute中檢查它。我喜歡@dongshengcn發佈的this answer,它將其封裝到AsyncTask的子類中,然後根據需要覆蓋onResult和/或onException