2014-09-04 6 views
0

Я делаю программу для сокетов клиента в Android, он правильно отправляет и получает данные, но моя проблема заключается в том, что клиент работает в «doInBackground» Asyntask. Мне нужна информация, которую клиент получает с сервера, чтобы продолжить работу с остальными процессами, и есть мой вопрос и тот подход, который мне нужен, как заставить программу ждать, пока метод сокета-получателя не получит данные перед вызовом других методов?Подход программирования сокета для Android

Пример:

1) MyClientTask myClientTask = новый MyClientTask (сервер, порт); myClientTask.execute();

2) Do_something_with _data_received();

3) Do_something_else_with _data_received();

Точка 2 будет работать вместе с клиентским сокетом в этом подходе.

Заранее спасибо.

+0

Не делайте «ожидание программы». Вызовите зависимые методы после получения данных. –

ответ

0

Если вы работаете с фрагментом, передайте фрагмент в асинтезу. Сделайте логику в doInBackground(), а затем фрагмент.method() в onPostExecute().

onPreexecute и onPostExecute запускают поток пользовательского интерфейса, doInBackground() запускается в отдельном потоке.

Подсказка: вы могли бы заменить вид с прогрессом (круговой) до тех пор пока AsyncTask сделано,

onPostExecute(){ 
    if(fragment.isAdded()){ 
     fragment.drawUI(); 
    } 
} 

где drawUI() есть логика, что делает ваш layoutView и делает его видимым.

onPostExecute(){ 

2) Do_something_with _data_received(); 

3) Do_something_else_with _data_received(); 

} 

СОВЕТ. Не вызывайте .get() asynctask, потому что он заморозит поток пользовательского интерфейса.

Смежные вопросы