Pregunta

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;
    }

}
¿Fue útil?

Solución

create your laptop instance in end element method.

  public void endElement(String uri, String localName, String qName)
        throws SAXException {
                    if (qName.equalsIgnoreCase("laptop")) {
        // create a new instance of Laptop
        laptop = new Laptop();

    }
   }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top