My main problem "When I run this project it did not show any output"
Kindly check my code have any mistack??
I am trying Xml Using SAX parser.I make XML file and name it as “laptops.xml”.Place this file in a local server, for example Xampp server’s “www” folder it has.
This XML file contains laptops details which also includes laptop image URL which can be downloaded into android.graphics.Bitmap object.
laptops.xml
<?xml version="1.0" encoding="UTF-8"?>
<laptops>
<laptop model = "Dell Inspiron i13z-3181PNK">
<brand>Dell</brand>
<price>$699.99</price>
<description>Switch your lid to match your mood.
A 13.3" laptop with 3rd Gen Intel Core processor power and optional SWITCH lids
</description>
<technical-details>
Intel 2nd gen Core i3-2367 1.40GHz 1.40 GHz (6MB Cache)
6 GB DIMM
500GB 5400 rpm SATA Hard Drive
13-Inch Screen
Windows 7 Home Premium 64-bit
</technical-details>
<image-url>https://127.0.0.1/one.jpg</image-url>
</laptop>
<laptop model = "Dell XPS XPS13-9001sLV">
<brand>Dell</brand>
<price>$1,399.99</price>
<description>Strikingly thin, with more room to view.
</description>
<technical-details>
Intel Core i7-2637M (1.70GHz, 4MB Cache)
4 GB DIMM
256GB Solid State Drive
13-Inch Screen
Windows 7 Home Premium 64-bit
</technical-details>
<image-url>https://127.0.0.1/two.jpg</image-url>
</laptop>
</laptops>
SAXParserAsyncTaskActivity.java
package com.example.saxparserasynctaskactivity;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
public class SAXParserAsyncTaskActivity extends Activity implements
OnClickListener, OnItemClickListener {
Button button;
ListView listView;
List<Laptop> laptops;
CustomListViewAdapter listViewAdapter;
static final String URL = "https://127.0.0.1/laptops.xml";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewsById();
button.setOnClickListener(this);
listView.setOnItemClickListener(this);
}
private void findViewsById() {
button = (Button) findViewById(R.id.button);
listView = (ListView) findViewById(R.id.laptopList);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
}
@Override
public void onClick(View view) {
GetXMLTask task = new GetXMLTask(this);
task.execute(new String[] { URL });
}
//private inner class extending AsyncTask
private class GetXMLTask extends AsyncTask<String, Void, List<Laptop>> {
private Activity context;
public GetXMLTask(Activity context) {
this.context = context;
}
@Override
protected void onPostExecute(List<Laptop> laptops) {
listViewAdapter = new CustomListViewAdapter(context, laptops);
listView.setAdapter(listViewAdapter);
}
/* uses HttpURLConnection to make Http request from Android to download
the XML file */
private String getXmlFromUrl(String urlString) {
StringBuffer output = new StringBuffer("");
try {
InputStream stream = null;
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
HttpURLConnection httpConnection = (HttpURLConnection) connection;
httpConnection.setRequestMethod("GET");
httpConnection.connect();
if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
stream = httpConnection.getInputStream();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(stream));
String s = "";
while ((s = buffer.readLine()) != null)
output.append(s);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return output.toString();
/* ---Using Apache DefaultHttpClient for applications targeting
Froyo and previous versions --- */
/*String xml = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
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;*/
}
@Override
protected List<Laptop> doInBackground(String... urls) {
List<Laptop> laptops = null;
String xml = null;
for (String url : urls) {
xml = getXmlFromUrl(url);
InputStream stream = new ByteArrayInputStream(xml.getBytes());
laptops = SAXXMLParser.parse(stream);
for (Laptop laptop : laptops) {
String imageURL = laptop.getImageURL();
Bitmap bitmap = null;
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
try {
bitmap = BitmapFactory
.decodeStream(new
URL(imageURL).openStream(),
null, bmOptions);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
laptop.setImageBitmap(bitmap);
}
}
// stream.close();
return laptops;
}
}
}
Laptop.java
package com.example.saxparserasynctaskactivity;
import android.graphics.Bitmap;
public class Laptop {
private String brand;
private String model;
private String description;
private String techDetails;
private String price;
private String imageURL;
private Bitmap imageBitmap;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getTechDetails() {
return techDetails;
}
public void setTechDetails(String techDetails) {
this.techDetails = techDetails;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getImageURL() {
return imageURL;
}
public void setImageURL(String imageURL) {
this.imageURL = imageURL;
}
public Bitmap getImageBitmap() {
return imageBitmap;
}
public void setImageBitmap(Bitmap imageBitmap) {
this.imageBitmap = imageBitmap;
}
}
SAXXMLHandler.java
package com.example.saxparserasynctaskactivity;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXXMLHandler extends DefaultHandler{
private List<Laptop> laptops;
private String tempVal;
// to maintain context
private Laptop laptop;
public SAXXMLHandler() {
laptops = new ArrayList<Laptop>();
}
public List<Laptop> getLaptops() {
return laptops;
}
// Event Handlers
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// reset
tempVal = "";
if (qName.equalsIgnoreCase("laptop")) {
// create a new instance of Laptop
laptop = new Laptop();
laptop.setModel(attributes.getValue("model"));
}
}
public void characters(char[] ch, int start, int length)
throws SAXException {
tempVal = new String(ch, start, length);
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equalsIgnoreCase("laptop")) {
// add it to the list
laptops.add(laptop);
} else if (qName.equalsIgnoreCase("brand")) {
laptop.setBrand(tempVal);
} else if (qName.equalsIgnoreCase("description")) {
laptop.setDescription(tempVal);
} else if (qName.equalsIgnoreCase("technical-details")) {
laptop.setTechDetails(tempVal);
} else if (qName.equalsIgnoreCase("image-url")) {
laptop.setImageURL(tempVal);
} else if (qName.equalsIgnoreCase("price")) {
laptop.setPrice(tempVal);
}
}
}
SAXXMLParser.java
package com.example.saxparserasynctaskactivity;
import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.util.Log;
public class SAXXMLParser {
public static List<Laptop> parse(InputStream is) {
List<Laptop> laptops = null;
try {
// create a XMLReader from SAXParser
XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser()
.getXMLReader();
// create a SAXXMLHandler
SAXXMLHandler saxHandler = new SAXXMLHandler();
// store handler in XMLReader
xmlReader.setContentHandler(saxHandler);
// the process starts
xmlReader.parse(new InputSource(is));
// get the `Laptop list`
laptops = saxHandler.getLaptops();
} catch (Exception ex) {
Log.d("XML", "SAXXMLParser: parse() failed");
ex.printStackTrace();
}
// return Laptop list
return laptops;
}
}