I am trying to parse xml and display it into list view but after run the app nothing happen the list display but not with xml data . i don't know if i missing something please can help me .
MainActivity class
public class MainActivity extends ListActivity { // All static variables static final String URL = "http://api.androidhive.info/pizza/?format=xml"; // XML node keys static final String KEY_ITEM = "item"; // parent node static final String KEY_ID = "id"; static final String KEY_NAME = "name"; static final String KEY_COST = "cost"; static final String KEY_DESC = "description"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } ListView myList=(ListView)findViewById(android.R.id.list); ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); XMLParser parser = new XMLParser(); String xml = null; // getting XML try { xml = parser.getXmlFormUrl(URL); } catch (IOException e) { e.printStackTrace(); } 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_COST, "Rs." + parser.getValue(e, KEY_COST)); 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.activity_main, new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] { R.id.name, R.id.desciption, R.id.cost }); myList.setAdapter(adapter); // selecting single ListView item } }
XmlParser class
public class XMLParser { String result; public String getXmlFormUrl(String link) throws IOException{ URL url=new URL(link.toString()); HttpURLConnection UrlConnection= (HttpURLConnection) url.openConnection(); int status=UrlConnection.getResponseCode(); if(status==200){ InputStream inputStream=UrlConnection.getInputStream(); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream,"UTF8")); StringBuilder stringBuilder= new StringBuilder(); String line; while ((line=bufferedReader.readLine())!=null){ stringBuilder.append((line+"\n")); } result=stringBuilder.toString(); inputStream.close(); } return result; } 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 DOM return doc; } public String getValue(Element item, String str) { NodeList n = item.getElementsByTagName(str); return this.getElementValue(n.item(0)); } 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 ""; } }
ActivityMain.xml
<ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@android:id/list" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="73dp" /> after this line i think the list should display with xml data but nothing happens
myList.setAdapter(adapter);
No comments:
Post a Comment