2011-05-18 79 views
1

在我的应用程序中,我试图从XML文件中存储在网络中形成网格视图。在网络中与图像形成gridview的问题

以下是我的代码

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; 
     } 
} 

无论我得到只有第一个图像存储在网址或其他我没有得到任何其他图像

以下是从我试图链接得到的图像

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

你是什么意思获得图像?它出错了哪里?你有例外吗?你能读取xml文件中的所有图像吗?适配器中是否有可用的图像? gridview是否可见,是否正确构建?你需要更具体地了解什么是错误的,它做了什么,你期望它做什么和工作。 – Ishtar 2011-06-07 09:02:04

+0

我可以读取所有图像的名称。在我的gridView中,我只获取了xml文件中的最后一张图片。我无法查看xml文件中的所有图像。 – 2011-06-07 09:36:49

+0

那么适配器呢?它是否包含图像? – Ishtar 2011-06-07 09:40:52

回答

0

您的代码是不完整的,所以这是一个有点困难,如果imageXMLfn你作为最终给出一个明确的答案,但在while循环签署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; 
    } 
} 

然而,你的代码是在这方面真的不完整的,所以我不知道这是否会工作了。

0

我发现的主要是同样的问题是这样的。懒惰在后台加载你的图片。在onpostexecute时,根本不要显示任何图像,因为当抛出屏幕时,当前的显示会像多媒体幻灯片那样疯狂,您的图像闪烁并可能会不正确地更新。后来我发现,如果你做的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后台加载程序时,在进程开始运行后,我加载一个占位符位图。我现在只需要找到一种方法来获取一些剩余的占位符图像,以便在图像可用时以某种方式在某些滚动条上进行更新。懒惰装载机遍布互联网,并认为它比上面的代码更好地加载远程图像。这是Androider试图完成的最棘手的事情之一。只要我遇到的所有其他“陷阱”都带给我。希望这能为你解决问题。快乐的编码。