This article will helps you to develope an RssFeed Reader (XML) for Nokia Mobile.
If you run this Application Initially, you will be able to display a (LCDUI User Interface)List Screen.
On this List Screen you will be displayed with an Image as well as a title from Rss-xml file.Moreover,if you click on any List Item you will be Navigate to a Form Screen.
You can Check the Complete Code Below:
Package Structure:
RssMidlet Class:
RssModel Class:
If you run this Application Initially, you will be able to display a (LCDUI User Interface)List Screen.
On this List Screen you will be displayed with an Image as well as a title from Rss-xml file.Moreover,if you click on any List Item you will be Navigate to a Form Screen.
You can Check the Complete Code Below:
Package Structure:
RssMidlet Class:
import java.util.Vector;public void startApp() {
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
public class RssMidlet extends MIDlet implements CommandListener {
private Display myDysplay;
private List rssList;
private Vector rssItem;
private Command cmdExit, cmdDetails;
private Command m_backCommand; // The back to header list command
private Form form; // The item form
private RssModel model;
public RssMidlet() {
rssItem= new Vector();
form=new Form("FormScreen");
myDysplay = Display.getDisplay(this);
m_backCommand = new Command("Back", Command.SCREEN, 1);
form.addCommand(m_backCommand);
rssList = new List("RssListScreen", List.IMPLICIT);
cmdExit = new Command("EXIT", Command.EXIT, 1);
cmdDetails = new Command("Details", Command.SCREEN, 2);
rssList.addCommand(cmdExit);
rssList.addCommand(cmdDetails);
}
// XML file url
String url = "Rss File Here";
form.setCommandListener(this);
rssList.setCommandListener(this);
ParseThread myThread = new ParseThread(this);
//this will start the second thread
myThread.getXMLFeed(url);
Display.getDisplay(this).setCurrent(rssList);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command command, Displayable displayable) {
/**
* Get back to RSS feed headers
*/
if (command == m_backCommand) {
myDysplay.setCurrent(rssList);
}
if (command == cmdExit) {
destroyApp(false);
notifyDestroyed();
} else if (command == cmdDetails || command == List.SELECT_COMMAND) {
//get the index of the selected title
int index = rssList.getSelectedIndex();
if (index != -1) {
Display.getDisplay(this).setCurrent(form);
}
}
}
//method called by the parsing thread
public void addItems(RssModel model) {
rssItem.addElement(rssItem);
rssList.append(model.getTitle(), model.getImage());
myDysplay.setCurrent(rssList);
}
public void DisplayError(Exception error) {
Alert errorAlert = new Alert("Error", error.getMessage(), null, null);
errorAlert.setTimeout(Alert.FOREVER);
myDysplay.setCurrent(errorAlert, rssList);
}
}
ParseThread:
import org.kxml2.io.*;public class ParseThread {
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.Image;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParser;
protected RssMidlet parentMidlet;private void ParseXMLFeed(InputStream input) throws IOException, XmlPullParserException {
private String imageurl;
private Image image;
private String readUrl;
private String srcUrl;
public ParseThread(RssMidlet parent) {
parentMidlet = parent;
}
public void getXMLFeed(final String url) {
Thread t = new Thread() {
public void run() {
HttpConnection myConnection = null;
try {
myConnection = (HttpConnection) Connector.open(url);
InputStream stream = myConnection.openInputStream();
ParseXMLFeed(stream);
} catch (Exception error) {
parentMidlet.DisplayError(error);
} finally {
try {
if (myConnection != null) {
myConnection.close();
}
} catch (IOException eroareInchidere) {
parentMidlet.DisplayError(eroareInchidere);
}
}
}
};
t.start();
}
System.out.println("ParseXMLFeed");//Image src Value from ptext
Reader dataReader = new InputStreamReader(input);
KXmlParser myParser = null;
try {
myParser = new KXmlParser();
} catch (Exception e) {
//System.out.println("hiiii" + e);
}
myParser.setInput(dataReader);
myParser.nextTag();
myParser.require(XmlPullParser.START_TAG, null, "rss");
myParser.nextTag();
myParser.require(XmlPullParser.START_TAG, null, "channel");
myParser.nextTag();
myParser.require(XmlPullParser.START_TAG, null, "title");
while (myParser.getEventType() != XmlPullParser.END_DOCUMENT) {
String name = myParser.getName();
if (name.equals("channel")) {
break;
}
if (name.equals("item")) {
if (myParser.getEventType() != XmlPullParser.END_TAG) {
myParser.nextTag();
String title = myParser.nextText();
System.out.println("Title" + title);
myParser.nextTag();
String link = myParser.nextText();
System.out.println("Link" + link);
myParser.nextTag();
String pubDate = myParser.nextText();
myParser.nextTag();
String ptext = myParser.nextText();//(<p>some text</p>)
System.out.println("PTEXT>>>" + ptext);
if (ptext.indexOf("src") != -1) {ImageClass: it will return the image class reference
int pTagIndex = ptext.indexOf("p");
int srcIndex1 = ptext.indexOf("src", pTagIndex);
int httpIndex1 = ptext.indexOf("/", srcIndex1);
int quotesIndex1 = ptext.indexOf("\"", httpIndex1);
srcUrl = ptext.substring(httpIndex1, quotesIndex1);
System.out.println("srcUrl " + srcUrl);
boolean containsWhitespace = srcUrl.trim().indexOf(" ") != -1;
if (containsWhitespace == true) {
displayDefaultImage();
} else {
//imageurl = "http://www...." + srcUrl;
ImageClass ic = new ImageClass();
image = ic.getImage(parentMidlet, srcUrl.trim());
}
} else {
System.out.println("Default");
displayDefaultImage();
}
//check imagesrc contains any whitespace characters or not
RssModel model = new RssModel(title, image);
parentMidlet.addItems(model);
}
} else {
myParser.skipSubTree();
}
myParser.nextTag();
}
input.close();
}
private void displayDefaultImage() {
try {
image = Image.createImage("/res/logo.png");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.DataInputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Image;
/**
*
* @author welcome
*/
public class ImageClass {
private RssMidlet parentMidlet;
private DataInputStream is = null;
private Image img = null;
private Display display;
public Image getImage(RssMidlet parentMidlet, String imageurl) {
this.parentMidlet = parentMidlet;
display = Display.getDisplay(parentMidlet);
try {
HttpConnection c = (HttpConnection) Connector.open(imageurl);
int len = (int) c.getLength();
if (len > 0) {
is = c.openDataInputStream();
byte[] data = new byte[len];
is.readFully(data);
img = Image.createImage(data, 0, len);
//img=createThumbnail(img);
} else {
showAlert("length is null");
}
is.close();
c.close();
} catch (Exception e) {
e.printStackTrace();
showAlert(e.getMessage());
}
return img;
}
private void showAlert(String err) {
Alert a = new Alert("");
a.setString(err);
a.setTimeout(Alert.FOREVER);
display.setCurrent(a);
}
}
RssModel Class:
import javax.microedition.lcdui.Image;
public class RssModel {
private String title;
private Image image;
public RssModel(String Title,Image image) {
title = Title;
this.image = image;
}
public String getTitle() {
return title;
}
public Image getImage() {
return image;
}
}
No comments:
Post a Comment