2011-05-18 39 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試圖完成的最棘手的事情之一。只要我遇到的所有其他「陷阱」都帶給我。希望這能爲你解決問題。快樂的編碼。