2013-11-06 2 views
0

У меня есть активность. Назовите его как действие A. Нажатие на кнопку в этом действии отправляет данные на сервер (метод POST), а также запускает действие B.Android - Уменьшите код в OnCreate, чтобы избежать черного экрана

Поскольку перед отправкой данных на сервер из Activity A есть некоторые вычисления, я выполнил задачу отправки данных на сервер в качестве задачи Async.

В операции B в методе OnCreate есть запрос GET, который запускается. Поэтому в результате запуска Activity B этот запрос GET запускается. После получения данных с сервера я загружаю данные в виде списка. Все это в методе OnCreate. Опять же, я выполнил этот запрос GET как задачу async.

Кроме того, метод POST в действии A и метод GET в действии B взаимосвязаны.

Проблема, с которой я сталкиваюсь, - это когда я нажимаю кнопку в действии А, экран становится черным и появляется через 10 секунд (действие В). Я выполнил индикатор выполнения в Activity B и сделал его появляться до получения ответа от сервера. Но это совсем не так. Все, что я получаю, - это внезапное заполнение списка.

Хотите знать, почему это выглядит как задача является асинхронной задачей в деятельности А и В

Activity B 

    onCreate method 
{ 

    display progress bar 

    asynctask to fetch data 

    while(data not fetched){ 

     // loop through until you get data    

    } 

    populate list view 

} 

Может ли один пожалуйста, дайте мне знать, где я неправильно. Это минимальный код, который должен быть в методе oncreate. Кроме того, поскольку это одноразовое мероприятие, я не хочу реализовывать его как службу. Кроме того, я не хочу идти с заставкой. Все, что я хочу, это индикатор выполнения, который отображается, пока я не получу данные с сервера. Пожалуйста, помогите, чтобы избежать этого черного экрана при переходе от А к деятельности активности В.

Благодаря

+3

while (данные не выбраны) {? действительно ? в чем смысл асинтезы, если вы просто стоите там, ожидая ее завершения? – njzk2

+0

Если данные недоступны, просмотр списка не будет заполнен. поэтому мне нужно подождать, пока не будет заполнен список. Любые предложения, как избежать этого сценария. Спасибо –

+1

вот что такое onPostExecute для. для выполнения материала после завершения задачи – njzk2

ответ

3

Может ли один пожалуйста, дайте мне знать, где я неправильно.

while(data not fetched){} бит скорее всего является источником вашей трудности.

Выполнение задания в onCreate() в порядке. Однако не блокирует обработку остальной части onCreate(). Удалите цикл while и выполните работу с дескриптором onPostExecute() вашей задачи, обновляя пользовательский интерфейс, когда данные будут готовы.

+0

Спасибо за это. Просто подтверждение. Мне нужно, чтобы сократить код, а делать (данные не надуманные) { // через цикл, пока вы не получите данные } заселить в виде списка и вставлять его в onPostExecute() метод. Дай мне знать. Спасибо –

+1

@TimothyRajan: Поскольку все, что вы предоставили, псевдокод, я не могу ответить на это. Повторюсь: ** не блокируйте обработку остальной части 'onCreate()' **. – CommonsWare

+0

Спасибо за это Commonsware.Я реализую это и дам вам знать результат. –

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