Результат AsyncTask отличается от обычной функции - PullRequest
1 голос
/ 05 октября 2011

У меня есть вид, который получает жесты смахивания.это должно инициировать создание и setContentView (макет) для основной деятельности.(Представление находится внутри макета в основном действии)

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

это частичный код из view.java

Main.mHandler.post(new Runnable()
                    { 
                        public void run()
                        {
                            new Main.GetNavigationLayout().execute(url);
                    }
                    });

URL-адрес - это местоположение .xmlфайл, который я использую для создания нового макета.

GetNavigationLayout - это код AsyncTask

, который является AsyncTask в Main.java:

public static class GetNavigationLayout extends AsyncTask<String, Void, CustomLayout> {
    boolean isDone = false; 
     @Override
        protected EvadoLayout doInBackground(String... url)
        {
            CustomLayout layout = new CustomLayout(Main);
                Looper.prepare();       
                try 
                {

                    String newpage = url[0];
                    Document doc = XmlImporter.GetNewPlayer(newpage);

                    if (doc == null)
                    {
                        layout = null; 
                    }       

                    layout.LoadXml(doc);  // cause drawing of objects etc. 



                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }

                isDone = true;
                //Looper.loop();   // causes it to never return...
            return layout;

        }

        @Override
        protected void onPostExecute(CustomLayout layout)
        {
            if (isDone)
              Main.setContentView(layout);
        }
 }

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

Ответы [ 2 ]

2 голосов
/ 05 октября 2011
  layout.LoadXml(doc);  // cause drawing of objects etc. 

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

1 голос
/ 05 октября 2011

Вы можете публиковать в пользовательском интерфейсе в onProgressUpdate () . Использование этого метода позволит вам оставаться внутри doInBackground и публиковать обновление в пользовательском интерфейсе, когда вы получите макет и продолжить работу внутри doInBackground. Используйте publishProgress () для отправки информации из doInBackground в поток пользовательского интерфейса.

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