Класс AsyncTask анализирует XML - PullRequest
       0

Класс AsyncTask анализирует XML

0 голосов
/ 13 сентября 2011

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

Класс вызывает и анализирует файлы XML перед загрузкой его в список. Это мое первое приложение для Android, поэтому любая помощь, которую вы можете предоставить, оценена.

Спасибо

public class DownloadXml extends AsyncTask<String, Void, String>
{       
    private ProgressDialog pd;
    protected String doInBackground(String... platform) 
    {
        pd = ProgressDialog.show(CategoryData.this, "Please Wait...", "Loading games");

        try
        {
            BaseFeedParser parser = new BaseFeedParser();
            messages = parser.parse();
        }
        catch (Throwable t)
        {
            Log.e("RetailApp",t.getMessage(),t);
        }
        return rowPlatform;
    }


    protected void onPostExecute(String rowPlatform)
    {
        productList = new ArrayList<HashMap<String, Object>>();

            for (Message msg : messages)
            {   
                if(msg.getPlatform().compareTo(rowPlatform) == 0 )
                {   
                    HashMap<String, Object> map = new HashMap<String, Object>();
                    map.put("Title", msg.getTitle());
                    map.put("Brand", msg.getBrand());
                    map.put("Price", "$" + msg.getPrice());

                    try
                    {
                        String picture[] = msg.getImage().split("-large.jpg");
                        URL pictureURL = new URL(picture[0] + "-medium.jpg");
                        Bitmap bitmap = BitmapFactory.decodeStream(pictureURL.openStream());
                        map.put("Img",bitmap);
                    }
                catch (Throwable t)
                {
                    Log.e("RetailApp",t.getMessage(),t);
                }
                productList.add(map);
                } 
            }

Редактировать : Я переместил цикл for в onPostExecute, и это, кажется, улучшает код, но я все еще получаю ошибку «незарегистрированный дескриптор все еще заблокирован». Есть идеи?

Спасибо за идею, Роб, но не повезло, удалили цикл и Toast из фона ... новый код выше. Я получаю сообщение об ошибке «Обработчик Uncaught: поток AsycTask # 1 выходит из-за необработанного исключения»

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Используйте свой LogCat.Журнал AndroidRuntime даст вам полную трассировку стека и строго типизированное исключение, которое покажет вам, почему именно он вышел из строя.

Я почти уверен, что вы пытаетесь показать ProgressDialog из фонанить.Вы должны сделать это в потоке пользовательского интерфейса непосредственно перед выполнением AsyncTask.Вы можете отклонить его в onPostExecute, поскольку он запускается в потоке пользовательского интерфейса

0 голосов
/ 14 сентября 2011

это

pd = ProgressDialog.show(CategoryData.this, "Please Wait...", "Loading games");

входит в onPreExecute (), который вызывается в потоке пользовательского интерфейса перед началом выполнения.

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