2016-04-15 7 views
0

私はAndroid用RSSリーダーを構築していますが、何が間違っているのか分かりません。私は常にエラーを取得http://developer.android.com/training/basics/network-ops/xml.htmlXMLPullParserがエラーをスローする:開始タグ

: 私はこのチュートリアルを使用ここで

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

は私XMLPullParserクラスです:

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

}

私は2時間のエラーを探していますしかし、私は本当に私のコードについて何が間違っているのか分かりません....

EDIT:

XMLファイル:ifrick.ch/feed

+0

xmlファイルを投稿してください –

+0

はrssフィードへのリンクを投稿しました – Nick

答えて

0

私はそれを得ました。コードは正しかった。

問題は、私が新しいクラスを作成して、これを既存のクラスのすぐ後ろにテスト用に配置したことでした。新しいXMLReaderクラスについては、Inputstreamは既に閉じられていました...

関連する問題