(Android) Задача httpClient с резьбой, без блокировки пользовательского интерфейса? - PullRequest
1 голос
/ 30 мая 2011

Я сделал приложение, которое выбирает веб-страницу из Интернета, основываясь на пользовательском вводе, которое работало. Выборка происходит в несколько этапов: публикация с String from edittext в качестве параметра, после некоторого анализа это возвращает массив имен, которые отображаются в AlertDialog. Когда пользователь выбирает один, он делает еще один пост с этой строкой в ​​качестве параметра.
Это работает, но теперь я хочу сделать его многопоточным (или аналогичным), чтобы пользовательский интерфейс не реагировал на запросы. Я попробовал Threads, Runnables и AsyncTask, но я просто не могу найти конструкцию для получения выборки в одном потоке, а также смогу вернуть этот массив и выбрать имя, БЕЗ создания нового экземпляра моего HttpClient. Это сотрет Cookies, которые вы видите ...

Я потратил целую неделю, чтобы понять это, но просто не вижу этого: (

Так у кого-нибудь есть идея? спасибо!

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Для каждого из ваших HTTP-обращений вы можете создать отдельный подкласс AsyncTask, затем по очереди создать каждый из них и выполнить их.В Интернете есть много примеров того, как использовать AsyncTask для доступа к HTTP, например, здесь или здесь (просто Google для чего-то вроде this ).

Основная идея, которую нужно понять, заключается в том, чтобы выполнять все сетевые операции внутри тела метода doInBackground в AsyncTask.

Как сказал Тед Хопп, вы можете разрешить экземпляру HttpClientбыть частным членом вашей Деятельности (или любого другого класса , который содержит две AsyncTasks), так что первый AsyncTask создаст его, а второй может просто использовать тот же.

0 голосов
/ 30 мая 2011

Вы можете использовать два подкласса AsyncTask, по одному для каждого запроса. Предоставьте подклассам доступ к переменной в вашем классе активности, в которой хранится объект HttpClient.

...