проблема формирования gridview с изображениями в сети - PullRequest
0 голосов
/ 18 мая 2011

в моем приложении я пытаюсь сформировать сетку из файла XML, который был сохранен в Интернете.

Ниже мой код

grid = (GridView)findViewById(R.id.gridView1);
imageXMLfn();
grid.setAdapter(new ImageAdapter(this));

private void imageXMLfn() 
    {
        try
        {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setIgnoringComments(true);
            factory.setCoalescing(true); 
            factory.setNamespaceAware(false); 
            factory.setValidating(false);

            DocumentBuilder parser = factory.newDocumentBuilder();             
            URL url = new URL(UserManual.IMAGE_URL);
            Log.e("ViewImage3",""+UserManual.IMAGE_URL);

            Document document= parser.parse(new InputSource(url.openStream()));            
            NodeList sections = document.getElementsByTagName("application");
            numSections = sections.getLength();
            for (int i = 0; i < numSections; i++) 
            {
                Element section = (Element) sections.item(i); 
                if(section.hasChildNodes()==true)
                {
                    NodeList section1=section.getChildNodes();
                    for(int j=0;j<section1.getLength();j++)
                    {
                        if(section1.item(j).hasChildNodes()==true)
                        {
                             for(int k=0;k<section1.item(j).getChildNodes().getLength();k++)
                             {                  
                                 xmlvalue=String.valueOf(section1.item(j).getChildNodes().item(k).getNodeValue()).trim(); 
                                 arl.add(xmlvalue);
                             }
                         }
                     }
                  }
               }
            } 
            catch(Exception e)
            {   
                System.out.println(e);
                Log.e("ViewImage Error1",e.getMessage());
            }

            Iterator<String> itr = arl.listIterator();
            int z=0,x=0,increment=0;
              while (itr.hasNext()) 
              {
                id = itr.next();
                img = img+id;
                z++;
              }           
    }


public class ImageAdapter extends BaseAdapter 
    {
        private Context myContext;

        private String[] myRemoteImages = {id};

        public ImageAdapter(Context c)
        { 
            this.myContext = c; 
        }
}

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

Следующая ссылка, по которой я пытаюсь получить изображения

http://94.23.207.167/websiteIphone/Admin/XML/Santa.xml

Ответы [ 2 ]

0 голосов
/ 26 апреля 2012

То, что я обнаружил в основном по этой же проблеме, так это. Ленивый Загрузите ваши изображения в фоновом режиме. Находясь в onpostexecute, не отображайте изображения вообще, так как при переворачивании экрана текущее отображение начинает сходить с ума, как мультимедийное слайд-шоу, где ваши изображения мигают и могут обновляться некорректно. Затем я обнаружил, что если вы сделаете обнаружение Fling по переменной gridview, например:

                mPhotoView.setOnScrollListener(new OnScrollListener() {      

        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            // TODO Auto-generated method stub

        }

        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // TODO Auto-generated method stub
            if(scrollState != SCROLL_STATE_IDLE) {
              mAdapter.setFlinging(true);
            } else {
              mAdapter.setFlinging(false);   
            }

            int first = view.getFirstVisiblePosition(); 
            int count = view.getChildCount(); 

            if (scrollState == SCROLL_STATE_IDLE || (first + count >    
                                mAdapter.getCount()) ) { 
                mPhotoView.invalidateViews(); 
            }

        } 
    }); 

invalidateViews приведет к обновлению только что загруженных изображений. Кроме того, при обращении к загрузчику Lazy background сразу после запуска процесса я загружаю растровое изображение заполнителя. Мне только сейчас нужно найти способ получить несколько из оставшихся изображений-заполнителей, которые каким-то образом пробираются через некоторые из свитков, которые будут обновляться, когда изображения станут доступны. Ленивые загрузчики находятся по всему Интернету и считают, что это гораздо лучший способ загрузки удаленных изображений, чем код, указанный выше. Это одна из самых хитрых вещей, которые пытается выполнить Андройдер. У меня ушло столько времени, сколько у всех остальных "гуч", с которыми я сталкивался. Надеюсь, это прояснит для вас. Удачного кодирования.

0 голосов
/ 08 июня 2011

Ваш код не завершен, поэтому немного сложно дать определенный ответ, но в конце цикла в конце, если imageXMLfn вы назначаете id = it.next().Адаптер изображения использует только id, для которого задано последнее значение в итераторе.Предполагая, что arl является полем в вашем классе типа ArrayList<String>, его, вероятно, можно решить следующим образом:

public class ImageAdapter extends BaseAdapter 
{
    private Context myContext;

    private String[] myRemoteImages = arl.toArray(new String[arl.size()]);

    public ImageAdapter(Context c)
    { 
        this.myContext = c; 
    }
}

Однако ваш код действительно неполный в этом отношении, поэтому я не уверен,это сработает.

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