AsyncTask в цикле

Ответить
kanaris
Сообщения: 7
Зарегистрирован: 04 ноя 2013, 21:19

AsyncTask в цикле

Сообщение kanaris » 10 ноя 2013, 09:17

Привет всем.
В методе onCreate есть следующий код:

Код: Выделить всё

new Get("http://site.ru") {

            @Override
            protected void onPostExecute(String s) {

                Gson g = new Gson();
                Value value = g.fromJson(s, Value.class);

                for (int i = 0; i < value.properties.length; i++) {

                    String text = value.properties[i].type;

                    if (text.equals("textview")) {
                        CreateTextView(value, i, true);
                    }

                    if (text.equals("edittext")) {
                        CreateEditText(value, i, s);
                    }

                    if (text.equals("spinner")) {
                        CreateTextView(value, i, false);
                        new CreateSpinner(value, i ,s).execute();  // вот тут возникает проблема
                    }
                }

            }
        }.execute("");
В кратце расскажу что здесь происходит.
Необходимо динамически создать компоненты из json'а.
Отправляю запрос на сервер - сервер возвращает мне ответ в формате json.
Пробегаюсь по строке и ищу компоненты, которые мне нужны.
Если нашел текствью - создал без проблем.
Если нашел едиттекст - создал создал без проблем.
Но для того, чтобы создать spinner нужно отправить дополнительный запрос на сервер.
Поэтому я создал внутренний класс, который делает это.
Но проблема в том, что компоненты должны быть созданы в таком же виде, в каком они описаны в json.
Код, приведенный выше работает, но spinner'ы создаются в самом конце активити.
Это в принципе логично, вызвал new CreateSpinner(value, i ,s).execute() - поток начал выполнятся, а цикл идет дальше, пока завершится поток - цикл уже пройдет несколько итераций.
Так вот, в чем вопрос: возможно ли сделать так, чтобы цикл не продолжался, пока поток не завершится?
Спасибо.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: AsyncTask в цикле

Сообщение Foenix » 10 ноя 2013, 09:22

смысл потоков в том, что каждый выполняется независимо от другого, не ждет завершения. Делай все в одном потоке.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

kanaris
Сообщения: 7
Зарегистрирован: 04 ноя 2013, 21:19

Re: AsyncTask в цикле

Сообщение kanaris » 10 ноя 2013, 09:30

но ведь нельзя работать с элементами пользовательского интерфейса не из ui потока. тогда как быть?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: AsyncTask в цикле

Сообщение Foenix » 10 ноя 2013, 10:03

я сказала делай все в одном потоке, а не в UI потоке.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить