I am currently attempting to parse an XML file from an URL. I have all the code down, but I get an exception:
08-23 23:14:17.848: W/System.err(10007): org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT
08-23 23:14:17.848: W/System.err(10007): Notice: Undefin...@3:15 in java.io.InputStreamReader@410b6188)
08-23 23:14:17.853: W/System.err(10007): at org.kxml2.io.KXmlParser.next(KXmlParser.java:426)
08-23 23:14:17.853: W/System.err(10007): at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
08-23 23:14:17.853: W/System.err(10007): at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:2035)
08-23 23:14:17.853: W/System.err(10007): at com.tabcards.android.XmlParser.parse(Search.java:155)
08-23 23:14:17.853: W/System.err(10007): at com.tabcards.android.Search$1.run(Search.java:65)
08-23 23:14:17.853: W/System.err(10007): at java.lang.Thread.run(Thread.java:864)
Here is my code for the parser :
class XmlParser {
private static final String ns = null;
public String username;
public List parse(InputStream in, String value)
throws XmlPullParserException, IOException {
username = value;
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in, null);
parser.nextTag();
return readFeed(parser);
} finally {
in.close();
}
}
private Entry readFile(XmlPullParser parser) throws XmlPullParserException,
IOException {
parser.require(XmlPullParser.START_TAG, ns, "martin");
String id = "";
String type = "";
String user_id = "";
String name = "";
String profilepic = "";
String bg = "";
String em = "";
String facebook = "";
String twitter = "";
String phone = "";
String email = "";
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String s = parser.getName();
if (s.equals("id")) {
id = readId(parser);
} else if (s.equals("type")) {
type = readType(parser);
} else if (s.equals("user_id")) {
user_id = readUserId(parser);
} else if (s.equals("name")) {
name = readName(parser);
} else if (s.equals("profilepic")) {
profilepic = readProfilepic(parser);
} else if (s.equals("bg")) {
bg = readBg(parser);
} else if (s.equals("em")) {
em = readEm(parser);
} else if (s.equals("facebook")) {
facebook = readFacebook(parser);
} else if (s.equals("twitter")) {
twitter = readTwitter(parser);
} else if (s.equals("phone")) {
phone = readPhone(parser);
} else if (s.equals("email")) {
email = readEmail(parser);
}
}
return new Entry(id, type, user_id, name, profilepic, bg, em, facebook,
twitter, phone, email);
}
private String readId(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "id");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "id");
return data;
}
private String readType(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "type");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "type");
return data;
}
private String readUserId(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "user_id");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "user_id");
return data;
}
private String readName(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "name");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "name");
return data;
}
private String readProfilepic(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "profilepic");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "profilepic");
return data;
}
private String readBg(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "bg");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "bg");
return data;
}
private String readEm(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "em");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "em");
return data;
}
private String readFacebook(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "facebook");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "facebook");
return data;
}
private String readTwitter(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "twitter");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "twitter");
return data;
}
private String readPhone(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "phone");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "phone");
return data;
}
private String readEmail(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "email");
String data = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "email");
return data;
}
private String readText(XmlPullParser parser) throws IOException,
XmlPullParserException {
String result = "";
if (parser.next() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
return result;
}
private void skip(XmlPullParser parser) throws XmlPullParserException,
IOException {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
private List readFeed(XmlPullParser parser) throws XmlPullParserException,
IOException {
List entries = new ArrayList();
parser.require(XmlPullParser.START_TAG, ns, username);
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
// Starts by looking for the entry tag
if (name.equals(username)) {
entries.add(readFile(parser));
} else {
skip(parser);
}
}
return entries;
}
}
class Entry {
public final String id, type, user_id, name, profilepic, bg, em, facebook,
twitter, phone, email;
// id, type, user_id, name, profilepic, bg, em, facebook, twitter, phone,
Entry(String id, String type, String user_id, String name,
String profilepic, String bg, String em, String facebook,
String twitter, String phone, String email) {
this.id = id;
this.type = type;
this.user_id = user_id;
this.name = name;
this.profilepic = profilepic;
this.bg = bg;
this.em = em;
this.facebook = facebook;
this.twitter = twitter;
this.phone = phone;
this.email = email;
}
}
The code I use in-order to start the XML parser is :
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
InputStream stream = null;
XmlParser stackOverflowXmlParser = new XmlParser();
List<Entry> entries = null;
try {
stream = downloadUrl("http://ift.tt/1q8xqKs"
+ value);
entries = stackOverflowXmlParser.parse(stream, value);
// Makes sure that the InputStream is closed after the
// app is
// finished using it.
} finally {
if (stream != null) {
stream.close();
}
}
createUI();
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
Line 65 = entries = stackOverflowXmlParser.parse(stream, value);
Line 155 = parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
http://ift.tt/1tF0SqV used as a reference
No comments:
Post a Comment