Страница 1 из 1

AsyncTask в цикле

Добавлено: 10 ноя 2013, 09:17
kanaris
Привет всем.
В методе 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() - поток начал выполнятся, а цикл идет дальше, пока завершится поток - цикл уже пройдет несколько итераций.
Так вот, в чем вопрос: возможно ли сделать так, чтобы цикл не продолжался, пока поток не завершится?
Спасибо.

Re: AsyncTask в цикле

Добавлено: 10 ноя 2013, 09:22
Foenix
смысл потоков в том, что каждый выполняется независимо от другого, не ждет завершения. Делай все в одном потоке.

Re: AsyncTask в цикле

Добавлено: 10 ноя 2013, 09:30
kanaris
но ведь нельзя работать с элементами пользовательского интерфейса не из ui потока. тогда как быть?

Re: AsyncTask в цикле

Добавлено: 10 ноя 2013, 10:03
Foenix
я сказала делай все в одном потоке, а не в UI потоке.