2012-05-10 51 views
1

擺脫XML數據的圖像我有一個XML結構,這樣如何通過解析

<element> 
    <foodjoint_name>DineOut</foodjoint_name> 
    <logo>http://192.168.1.112/dineout/images/dominos.jpg</logo> 
</element> 

我解析數據:<foodjoint_name>會的一些事情 <logo >將圖像的URL字符串名稱。我有一個xmlParser,我解析數據

在我的主類中,我顯示了一個listView解析的數據。我的問題是,我沒有得到這個標誌。

如何獲得?請告訴我,如果我必須更改代碼。

這是我的主類

// All static variables 

    static final String URL = "http://192.168.1.112/dineout/index.php/dineout/view"; 

    // XML node keys 
    static final String KEY_ITEM = "element"; // parent node 
    //static final String KEY_ID = "foodjoint_id"; 
    static final String KEY_NAME = "foodjoint_name"; 
    static final String KEY_LOGO = "logo"; 
    //static final String KEY_DESC = "foodjoint_description"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); 

     XMLParser parser = new XMLParser(); 
     String xml = parser.getXmlFromUrl(URL); // getting XML 
     Document doc = parser.getDomElement(xml); // getting DOM element 

     NodeList nl = doc.getElementsByTagName(KEY_ITEM); 
     // looping through all item nodes <item> 
     for (int i = 0; i < nl.getLength(); i++) { 
      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 
      Element e = (Element) nl.item(i); 
      // adding each child node to HashMap key => value 
      //map.put(KEY_ID, parser.getValue(e, KEY_ID)); 
      map.put(KEY_NAME, parser.getValue(e, KEY_NAME)); 
      map.put(KEY_LOGO, parser.getValue(e, KEY_LOGO)); 

      //map.put(KEY_DESC, parser.getValue(e, KEY_DESC)); 

      // adding HashList to ArrayList 
      menuItems.add(map); 
     } 

     // Adding menuItems to ListView 
     ListAdapter adapter = new SimpleAdapter(this, menuItems, 
       R.layout.list_item, 
       new String[] { KEY_NAME, KEY_LOGO }, new int[] { 
         R.id.name,R.id.imageView1 }); 

     setListAdapter(adapter); 

     // selecting single ListView item 
     ListView lv = getListView(); 

     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // getting values from selected ListItem 
       String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); 
       String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString(); 
       String description = ((TextView) view.findViewById(R.id.desciption)).getText().toString(); 

       // Starting new intent 
       Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class); 
       in.putExtra(KEY_NAME, name); 
       in.putExtra(KEY_LOGO, cost); 
       //in.putExtra(KEY_DESC, description); 
       startActivity(in); 

      } 
     }); 
    } 
} 

這是我的分析器類

public class XMLParser { 



    // constructor 
    public XMLParser() { 

    } 

    /** 
    * Getting XML from URL making HTTP request 
    * @param url string 
    * */ 
    public String getXmlFromUrl(String url) { 
     String xml = null; 

     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      xml = EntityUtils.toString(httpEntity); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     // return XML 
     return xml; 
    } 

    /** 
    * Getting XML DOM element 
    * @param XML string 
    * */ 
    public Document getDomElement(String xml){ 
     Document doc = null; 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     try { 

      DocumentBuilder db = dbf.newDocumentBuilder(); 

      InputSource is = new InputSource(); 
       is.setCharacterStream(new StringReader(xml)); 
       doc = db.parse(is); 

      } catch (ParserConfigurationException e) { 
       Log.e("Error: ", e.getMessage()); 
       return null; 
      } catch (SAXException e) { 
       Log.e("Error: ", e.getMessage()); 
       return null; 
      } catch (IOException e) { 
       Log.e("Error: ", e.getMessage()); 
       return null; 
      } 

      return doc; 
    } 

    /** Getting node value 
     * @param elem element 
     */ 
    public final String getElementValue(Node elem) { 
     Node child; 
     if(elem != null){ 
      if (elem.hasChildNodes()){ 
       for(child = elem.getFirstChild(); child != null; child = child.getNextSibling()){ 
        if(child.getNodeType() == Node.TEXT_NODE ){ 
         return child.getNodeValue(); 
        } 
       } 
      } 
     } 
     return ""; 
    } 

    /** 
     * Getting node value 
     * @param Element node 
     * @param key string 
     * */ 
    public String getValue(Element item, String str) {  
      NodeList n = item.getElementsByTagName(str);   
      return this.getElementValue(n.item(0)); 
     } 

回答

0

你必須對圖像做HTTP請求saperately是不是?

執行HTTP請求和節省SD卡的圖像,然後使用SD卡路徑,以顯示它在您的ImageView ..

+0

不,我得到的HTTP請求時,它解析爲XML,它的節點中的一個具有價值的圖像路徑怎麼做? – divaNilisha

+0

這就是我所說的所有解析完成後..你會得到像這樣的圖像路徑..「http://192.168.1.112/dineout/images/dominos.jpg」..然後解析後做的http在這個路徑上請求,你會得到位圖的圖像,你可以用它來顯示它 – NullPointerException

0

解析XML使用XmlPullParser。一旦URL被提取,您可以輕鬆下載。

+0

你能給我一個例子嗎?我還沒有嘗試過,如何使用 – divaNilisha

+0

我在這裏提到的鏈接包含的例子。 – sachy