2011-05-30 75 views
1

我已經做了一個應用程序,從互聯網上抓取一個網頁,根據用戶輸入,工作。抓取進入不同的步驟:使用edittext中的String作爲參數發佈,解析後返回AlertDialog中顯示的一個名稱數組。當用戶選擇一個時,它會以該String作爲參數創建另一個帖子。
這有效,但現在我想使它成爲Threaded(或類似),以便UI不會無響應。 我嘗試過Threads,Runnables和AsyncTask,但我無法找到一個構造來獲取單個線程中的抓取,並且還能夠返回該數組並選擇一個名稱,而無需製作我的HttpClient的新實例。這將清除cookies,您看......(Android)Threaded httpClient任務,不阻塞UI?

我已經花了約整整一個星期來搞清楚了這一點,但只是沒有看到它:(

因此,任何人有一個想法?謝謝!

回答

2

對於您的每個HTTP訪問,您可以創建一個單獨的AsyncTask子類,然後依次實例化它們中的每一個並執行它們。在Web上有很多關於如何使用AsyncTask訪問HTTP的例子,例如, herehere(就像this這樣的谷歌)。

這裏掌握的主要思路是做AsyncTask的doInBackground方法體內的所有網絡相關操作。

特德·霍普說,你可以讓HttpClient的實例是你活動的私有成員(或其他類持有兩個AsyncTasks),使得第一的AsyncTask將創建它,而第二個可以只使用一樣。

+0

我喜歡第二個「這裏」最好的。很好的解決方案 – 2012-04-30 19:13:25

0

您可以使用兩個AsyncTask子類,每個請求一個子類,讓子類可以訪問存儲HttpClient對象的活動類中的變量

+1

兩個子類?你是指兩個實例嗎? – user717572 2011-05-30 18:22:28

+0

我的意思是兩個不同的子類的實例。在一個子類中,'doInBackground'檢索名稱數組。一旦選擇了一個名字,創建另一個子類的實例(在其構造函數中傳遞選定的名稱),在它的'doInBackground'中,執行第二個POST。 – 2011-05-30 18:39:28