2011-03-28 100 views
0

嘿,我有一個應用程序使用defaulthttpclient登錄到幾個網站,我發現我需要使用AsyncTask作爲請求阻塞UI線程。在我的代碼中,我創建了一個狀態類的實例,即State state = new O2State();與不同的網站不同的狀態。需要幫助AsyncTasks - Android應用程序

然後我調用state.logon(String username,String password);返回包含結果這樣的細節的字符串:

String result = state.logon(username, password); 

我一直在試圖實現asynctasks運行在另一個線程此代碼,返回字符串回到UI線程上完成。這個想法是我會顯示一個進度對話框,運行線程,並在完成後,會顯示一個對話框的結果。

我一直在找這個例子:

public void onClick(View v) { 
new DownloadImageTask().execute("http://example.com/image.png"); 
} 

private class DownloadImageTask extends AsyncTask { 
    protected Bitmap doInBackground(String... urls) { 
     return loadImageFromNetwork(urls[0]); 
    } 

    protected void onPostExecute(Bitmap result) { 
     mImageView.setImageBitmap(result); 
    } 
} 

如果我堅持的是: 我不認爲我需要任何參數,但是doinbackground似乎需要的參數列表。我也不熟悉這個方法參數聲明的時間。

其次: 我不知道如何在線程完成執行時返回結果字符串。我應該創建一個「DoThisWhenTheThreadIsFinished(String result)」並從onPostExecute調用它嗎?

無論如何,我希望這不是太混亂閱讀,我非常感謝您可以提供任何幫助。 謝謝

回答

1

如果您不需要參數只需指定類型(例如字符串)並忽略它,或者您可以使用Void類(注意大寫字母V)。

對於如何將控制返回到UI線程以反映更新的建議是一個好方法。即在onPostExecute()中調用活動的方法來更新UI。

作爲一般規則,如果任何操作需要超過幾百毫秒,請使用單獨的線程。您可能還想使用旋轉進度指示器來顯示應用程序正在執行某些操作。

(當人們回答你的問題時,總是對你喜歡的問題進行評分,然後選擇一個作爲「最佳」答案。

+0

@Oille C嘿非常感謝,我實際上對參數進行了很多排序,但仍然想知道如何將結果發送回UI線程,因此很好的瞭解我的想法是有道理的:-)我有任務啓動和解散進度對話框,其工作正常。我只是不確定如何引用當前活動的方法。我將活動的引用傳遞給任務構造函數,但「activity.displayLoginResults();」但我得到「未定義的類型活動錯誤」。有什麼建議麼? – 2011-03-28 18:05:41

+0

@Oille C乾杯,實際上,問題是我把這個血腥的方法設置爲私人哈哈。是作爲一個獨立的類與活動正在通過作爲參考。 CHeersw的建議! – 2011-03-29 12:15:06