2012-02-10 152 views
0

我有一個包含以下元素的登錄系統:我在哪裏擴展AsyncTask?

LoginActivity使用LoginController使用RestClient使用Execute()調用Web服務。我希望對Web服務的調用是異步執行的,但我也需要一個對話框來通知用戶正在進行調用時的相關信息。執行不會返回任何內容。

我該如何去做這件事?我在哪裏使用AsyncTask?

+0

您可以覆蓋onProgressUpdate的AsyncTask的方法來顯示dialog.publishProgress將調用onProgressUdate。 – Rasel 2012-02-10 08:01:32

回答

0

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 
} 
+0

好的。我可能會問一個白癡,但似乎doInBackground需要返回一些東西。我想要由doInBackground執行的方法在內部保存了它所需的所有數據,因此不會返回任何內容。爲什麼我不能宣佈它無效? – CodePrimate 2012-02-10 08:06:46

+0

你可以聲明它爲空。我會編輯我的答案。 – 2012-02-10 08:07:44

+0

好的。最後一件事。你在哪裏建議我創建我的私人CallServiceTask類?我稍後會在我的應用程序的其他部分需要它,所以明顯的選擇似乎在RestClient中。它是否正確? 我在「myTask extends AsyncTask ? – CodePrimate 2012-02-10 08:13:30

相關問題