我有一個包含以下元素的登錄系統:我在哪裏擴展AsyncTask?
LoginActivity使用LoginController使用RestClient使用Execute()調用Web服務。我希望對Web服務的調用是異步執行的,但我也需要一個對話框來通知用戶正在進行調用時的相關信息。執行不會返回任何內容。
我該如何去做這件事?我在哪裏使用AsyncTask?
我有一個包含以下元素的登錄系統:我在哪裏擴展AsyncTask?
LoginActivity使用LoginController使用RestClient使用Execute()調用Web服務。我希望對Web服務的調用是異步執行的,但我也需要一個對話框來通知用戶正在進行調用時的相關信息。執行不會返回任何內容。
我該如何去做這件事?我在哪裏使用AsyncTask?
AsyncTask有幾個方法可以幫助你解決這個問題。
擴展的AsyncTask:
public class MyTask extends AsyncTask<Object, Void, Void>
@Override
protected void onPreExecute() {
// show progress dialog
}
@Overrride
protected Void doInBackground(Object... params) {
HttpUriRequest req = (HttpUriRequest) params[0];
String myString = (String) params[1];
// connect
return null;
}
@Override
protected void onPostExecute(Void result) {
// hide dialog
}
}
要使用的參數來執行此,嘗試此:
myTask.execute(request, "aString");
在哪裏請求的類型是HttpUriRequest的對象。記住參數的順序很重要。
如果你想在服務處於連接您可以使用此方法RASEL說來更新狀態:
onProgressUpdate() {
// Update view in progress dialog
}
好的。我可能會問一個白癡,但似乎doInBackground需要返回一些東西。我想要由doInBackground執行的方法在內部保存了它所需的所有數據,因此不會返回任何內容。爲什麼我不能宣佈它無效? – CodePrimate 2012-02-10 08:06:46
你可以聲明它爲空。我會編輯我的答案。 – 2012-02-10 08:07:44
好的。最後一件事。你在哪裏建議我創建我的私人CallServiceTask類?我稍後會在我的應用程序的其他部分需要它,所以明顯的選擇似乎在RestClient中。它是否正確? 我在「myTask extends AsyncTask ? – CodePrimate 2012-02-10 08:13:30
您可以覆蓋onProgressUpdate的AsyncTask的方法來顯示dialog.publishProgress將調用onProgressUdate。 – Rasel 2012-02-10 08:01:32