- 1.
Parsing XML result
to list view using DOM
- 2.
Network
process on UI thread (sdk version <= 8)
- 3.
Simple click on list view
========================================
Requirements
1.
MainActivity with simple list
2.
XML Parse class
3.
Save details in map using parse class
4.
Listing all items in list view using ListAdapter
5.
Put action on listview row.
6.
Show particular view on new activity.
FILES
1. XMLParser.java
2. AndroidXMLParsingActivity.java
3. SingleMenuItemActivity .java
4. Main.xml
5. List_item.xml
6. Single_list_item.xml
===========================================
public class XMLParser {
// constructor
public XMLParser() {
}
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;
}
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;
}
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 "";
}
public String getValue(Element item, String
str) {
NodeList
n = item.getElementsByTagName(str);
return this.getElementValue(n.item(0));
}
}
===========================================
public class
AndroidXMLParsingActivity 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
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_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.list_item,
new String[] { KEY_NAME, KEY_DESC, KEY_COST },
new int[] { R.id.name, R.id.desciption, R.id.cost });
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_COST, cost);
in.putExtra(KEY_DESC, description);
startActivity(in);
}
});
}
}
===========================================
// this activity for show single row
in differ view
public class
SingleMenuItemActivity extends Activity {
// XML node keys
static final String KEY_NAME = "name";
static final String KEY_COST = "cost";
static final String KEY_DESC = "description";
@Override
public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.single_list_item);
//
getting intent data
Intent in = getIntent();
//
Get XML values from previous intent
String name = in.getStringExtra(KEY_NAME);
String cost = in.getStringExtra(KEY_COST);
String description = in.getStringExtra(KEY_DESC);
//
Displaying all values on the screen
TextView lblName = (TextView) findViewById(R.id.name_label);
TextView lblCost = (TextView) findViewById(R.id.cost_label);
TextView lblDesc = (TextView) findViewById(R.id.description_label);
lblName.setText(name);
lblCost.setText(cost);
lblDesc.setText(description);
}
}
**********************************************
=======================================
XML LAYOUTS
Main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<!-- Main ListView
Always give id value as list(@android:id/list)
-->
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout
===========================================
List_item.xml
<?xml version="1.0"
encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Name Label
-->
<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#dc6800"
android:textSize="16sp"
android:textStyle="bold"
android:paddingTop="6dip"
android:paddingBottom="2dip" />
<!-- Description
label -->
<TextView
android:id="@+id/desciption"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#acacac"
android:paddingBottom="2dip">
</TextView>
<!--
Linear layout for cost and price Cost: Rs.100 -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!--
Cost Label -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#5d5d5d"
android:gravity="left"
android:textStyle="bold"
android:text="Cost: " >
</TextView>
<!--
Price Label -->
<TextView
android:id="@+id/cost"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#acacac"
android:textStyle="bold"
android:gravity="left">
</TextView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
===========================================
Single_list_item.xml
<?xml version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--
Name Label -->
<TextView android:id="@+id/name_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="25dip"
android:textStyle="bold"
android:paddingTop="10dip"
android:paddingBottom="10dip"
android:textColor="#dc6800"/>
<!--
Description Label -->
<TextView android:id="@+id/description_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#acacac"/>
<!--
Price Label -->
<TextView android:id="@+id/cost_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"/>
</LinearLayout>
No comments:
Post a Comment