Java 在web上用图像生成gridview时的问题

Java 在web上用图像生成gridview时的问题,java,android,xml,gridview,iterator,Java,Android,Xml,Gridview,Iterator,在我的应用程序中,我试图从存储在web中的xml文件中形成一个网格视图 下面是我的代码 grid = (GridView)findViewById(R.id.gridView1); imageXMLfn(); grid.setAdapter(new ImageAdapter(this)); private void imageXMLfn() { try { DocumentBuilderFactory factory = Doc

在我的应用程序中,我试图从存储在web中的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; 
        }
}

您的代码不完整,因此很难给出明确的答案,但如果您正在分配
id=it.next()
,则在最后的while循环中。图像适配器仅使用设置为迭代器中最后一个值的
id
。假设
arl
是类中类型为
ArrayList
的字段,可能可以通过以下方法解决:

public class ImageAdapter extends BaseAdapter 
{
    private Context myContext;

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

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

然而,您的代码在这方面确实不完整,所以我不确定这是否会奏效

对于同一个问题,我发现最多的是这个。在背景中延迟加载图像。在onpostexecute中时,根本不显示任何图像,因为在弹出屏幕时,当前显示会像多媒体幻灯片一样疯狂,图像会在屏幕上闪烁,并且可能会被错误更新。然后我发现,如果对gridview变量执行Fling检测,例如:

                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后台加载程序时,在进程启动后,我加载了一个占位符位图。我现在只需要找到一种方法来获取一些剩余的占位符图像,这些图像以某种方式在一些滚动条上找到,以便在图像可用时进行更新。惰性加载程序遍布互联网,它认为加载远程图像的方式比上面的代码要好得多。这是Androider试图完成的最棘手的事情之一。花了我这么长的时间,我遇到了所有其他的“怪癖”。希望这能帮你解决问题。愉快的编码。

获取图像意味着什么?哪里出了问题?你有例外吗?您能从xml文件中读取所有图像吗?适配器中的所有映像都可用吗?gridview是否可见,构造是否正确?你需要更具体地说明什么是错误的,它做了什么,你期望它做什么,什么是有效的。在我的gridView中,我只得到xml文件中的最后一个图像。我无法查看xml文件中的所有图像。那么适配器呢?它包含图像吗?它只包含一个图像…您的xml有点混乱,您需要从这个xml输出什么样的图片?或顺便说一下,使用这样的标签不是一个好的做法,我的意思是[\d]在其中。。。
                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(); 
            }

        } 
    });