2016-04-15 9 views
0

Ich baue einen RSS-Reader für Android, aber ich habe keine Ahnung, was ich falsch mache. ich verwendet, um dieses Tutorial: http://developer.android.com/training/basics/network-ops/xml.htmlXMLPullParser wirft Error Erwartet: Start Tag

ich einen Fehler immer:

/RSSXMLHELPER:: Error: org.xmlpull.v1.XmlPullParserException: expected: START_TAG {null}rss (position:START_DOCUMENT [email protected]:1 in [email protected])

Hier ist meine XMLPullParser Klasse:

public class RSSXMLHelper { 

PostData postData; 
ArrayList<PostData> pList; 

public ArrayList<PostData> parse(InputStream in) throws XmlPullParserException, IOException { 
     if (in != null) { 
      try { 
       XmlPullParser parser = Xml.newPullParser(); 

       parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 

       parser.setInput(in, null); 

       parser.nextTag(); 

       return readRss(parser); 
      } finally { 
       if (in != null) { 
        in.close(); 
       } 
      } 
     } else { 
      postData = new PostData(); 

      pList = new ArrayList<>(); 
      //l.add(entry); 
      return pList; 

     } 
} 

private ArrayList<PostData> readRss(XmlPullParser parser) 
     throws XmlPullParserException, IOException { 
    ArrayList<PostData> items = new ArrayList<>(); 
    parser.require(XmlPullParser.START_TAG, null, "rss"); 
    while (parser.next() != XmlPullParser.END_TAG) { 
     if (parser.getEventType() != XmlPullParser.START_TAG) { 
      continue; 
     } 
     String name = parser.getName(); 
     if (name.equals("channel")) { 
      items.addAll(readChannel(parser)); 
     } else { 
      skip(parser); 
     } 
    } 
    return items; 
} 

private ArrayList<PostData> readChannel(XmlPullParser parser) 
     throws IOException, XmlPullParserException { 
    ArrayList<PostData> items = new ArrayList<>(); 
    parser.require(XmlPullParser.START_TAG, null, "channel"); 
    while (parser.next() != XmlPullParser.END_TAG) { 
     if (parser.getEventType() != XmlPullParser.START_TAG) { 
      continue; 
     } 
     String name = parser.getName(); 
     if (name.equals("item")) { 
      items.add(readItem(parser)); 
     } else { 
      skip(parser); 
     } 
    } 
    return items; 
} 

private PostData readItem(XmlPullParser parser) throws XmlPullParserException, IOException { 
    PostData postData = new PostData(); 
    parser.require(XmlPullParser.START_TAG, null, "item"); 
    while (parser.next() != XmlPullParser.END_TAG) { 
     if (parser.getEventType() != XmlPullParser.START_TAG) { 
      continue; 
     } 
     String name = parser.getName(); 
     if (name.equals("title")) { 
      postData.setPostTitle(readTitle(parser)); 
     } else { 
      skip(parser); 
     } 
    } 
    return postData; 
} 

private String readTitle(XmlPullParser parser) 
     throws IOException, XmlPullParserException { 
    parser.require(XmlPullParser.START_TAG, null, "title"); 
    String title = readText(parser); 
    parser.require(XmlPullParser.END_TAG, null, "title"); 
    return title; 
} 

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

}

ich den Fehler für 2 Stunden am searching , aber ich weiß wirklich nicht, was an meinem Code falsch ist ....

EDIT:

XML-Datei: ifrick.ch/feed

+0

Bitte posten Sie Ihre XML-Datei –

+0

gepostet den Link zum RSS-Feed – Nick

Antwort

0

ich habe es. Der Code war richtig.

Das Problem war, dass ich eine neue Klasse schreibe und dies zum Testen direkt hinter die bestehende Klasse setze. Der Inputstream wurde bereits geschlossen, wenn es um die neue XMLReader-Klasse geht ...