Ввод темы с неправильным счетом - PullRequest
0 голосов
/ 22 февраля 2012

Извлечение материала из сети невозможно в потоке пользовательского интерфейса в Android.Я пытаюсь обойти это так ...

for(i=0;i<list.size();i++){

    //add a UI element

    new Thread(new Runnable(){
        public void run(){
            //retrieve online content
        }
    }).start();   
   LinearLayout.addView(MyView);

}

Подобный пример в документах для Android

частьвнутри потока обращается к списку с помощью метода get ().когда «i» должен быть 0, чтобы получить первый элемент в списке, «i» фактически равен 1 и вызывает исключение OutOfBoundsException, если существует только один элемент.Я собираюсь предположить, что у меня есть проблема с безопасностью потока здесь.Есть ли простой способ решить эту проблему?

1 Ответ

2 голосов
/ 22 февраля 2012

Прочтите это http://developer.android.com/reference/android/os/AsyncTask.html, чтобы использовать AsyncTask для выполнения задач в фоновом режиме вместо использования Threads.

. AsyncTasks предоставляют хорошую оболочку для выполнения фоновой задачи и задачи postExecute (непосредственно в потоке пользовательского интерфейса).) и т. д.

РЕДАКТИРОВАТЬ: также из вашего кода я не уверен, что это будет правильно ... похоже, что вы запускаете поток для каждого элемента в list.

и

LinearLayout.addView(MyView);

действительно зависит от задачи, которую вы выполняете в фоновом режиме?Если да, сделайте это один раз после того, как вы получите все данные из сети (и внутри потока), потому что только тогда вы будете знать, что задача была выполнена.если нет, то нет причин помещать его здесь ..

Вместо этого вы должны запустить один поток (лучше асинхронную задачу) для извлечения из сети и показать / обновить пользовательский интерфейс, когда поток / задача закончена ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...