(Android)Threaded httpClient任务,不阻塞UI?

问题描述:

我已经做了一个应用程序,从互联网上抓取一个网页,根据用户输入,工作。抓取进入不同的步骤:使用edittext中的String作为参数发布,解析后返回AlertDialog中显示的一个名称数组。当用户选择一个时,它会以该String作为参数创建另一个帖子。
这有效,但现在我想使它成为Threaded(或类似),以便UI不会无响应。 我尝试过Threads,Runnables和AsyncTask,但我无法找到一个构造来获取单个线程中的抓取,并且还能够返回该数组并选择一个名称,而无需制作我的HttpClient的新实例。这将清除cookies,您看......(Android)Threaded httpClient任务,不阻塞UI?

我已经花了约整整一个星期来搞清楚了这一点,但只是没有看到它:(

因此,任何人有一个想法?谢谢!

对于您的每个HTTP访问,您可以创建一个单独的AsyncTask子类,然后依次实例化它们中的每一个并执行它们。在Web上有很多关于如何使用AsyncTask访问HTTP的例子,例如, herehere(就像this这样的谷歌)。

这里掌握的主要思路是做AsyncTask的doInBackground方法体内的所有网络相关操作。

特德·霍普说,你可以让HttpClient的实例是你活动的私有成员(或其他类持有两个AsyncTasks),使得第一的AsyncTask将创建它,而第二个可以只使用一样。

+0

我喜欢第二个“这里”最好的。很好的解决方案 – 2012-04-30 19:13:25

您可以使用两个AsyncTask子类,每个请求一个子类,让子类可以访问存储HttpClient对象的活动类中的变量

+1

两个子类?你是指两个实例吗? – user717572 2011-05-30 18:22:28

+0

我的意思是两个不同的子类的实例。在一个子类中,'doInBackground'检索名称数组。一旦选择了一个名字,创建另一个子类的实例(在其构造函数中传递选定的名称),在它的'doInBackground'中,执行第二个POST。 – 2011-05-30 18:39:28