2016-07-25 9 views
0

現在、XMLの処理とArrayListへの格納に関するいくつかの練習を行っていますが、this xmlを使用しているときはうまくいきます。しかし、this xmlに切り替えると、突然データはArrayListに格納されません。私はいくつかの出力テストを行っており、データがfeedItems.add(new FeedItem(title,date));にここで渡されなかったようです。誰かが自分のコードで何が起こっているのか、どうやってこの問題を解決できるのかを誰かに説明できることを願っています。アイテムは異なるXML構造を持つArrayListに格納されません

MainActivity.java

new ReadRSS(MainActivity.this, listView, "http://www.thestar.com.my/rss/editors-choice/main/").execute(); 

ReadRSS.java

public void parseXMLAndStoreIt(XmlPullParser myParser) { 
    int event; 
    String text; 
    String title = null; 
    String date = null; 

    feedItems = new ArrayList<FeedItem>(); 

    try { 
     event = myParser.getEventType(); 

     while (event != XmlPullParser.END_DOCUMENT) { 
      String tagName = myParser.getName(); 

      switch (event){ 

       case XmlPullParser.START_TAG: 
        if(tagName.equalsIgnoreCase("item")){ 
         int eventChild = myParser.next(); 
         //int innerLoop = 1; 


         String tagNameChild = ""; 
          while(eventChild != XmlPullParser.END_DOCUMENT){ 

           if(eventChild == XmlPullParser.START_TAG){ 
            tagNameChild = myParser.getName(); 
            // Output Test 
            //Log.d("Tag ", tagNameChild); 
           } 

           else if (eventChild == XmlPullParser.TEXT){ 

            text = myParser.getText(); 
            // Output Test 
            //Log.d("Test ", text); 


            if(tagNameChild.equalsIgnoreCase("title")){ 

             title = text; 
             // Output Test 
             //Log.d("Title ", myParser.getText()); 
            } 
            else if(tagNameChild.equalsIgnoreCase("pubDate")){ 

             date = text; 
             // Output Test 
             //Log.d("PubDate ", myParser.getText()); 

            } 
           } 

           else if (eventChild == XmlPullParser.END_TAG){ 


            if(myParser.getName().equalsIgnoreCase("item")){ 

             feedItems.add(new FeedItem(title,date)); 
             // Output Test 
             //Log.d("Test ", title); 

            } 

           } 

           eventChild = myParser.next(); 

          //innerLoop++; 
          } 

         //Output Test 
         for(int i = 0; i < feedItems.size(); i++) { 
          Log.d("Title", feedItems.get(i).getTitle()); 
          Log.d("Date", feedItems.get(i).getPubDate()); 
         } 
        } 

        break; 

       case XmlPullParser.TEXT: 
        break; 

       case XmlPullParser.END_TAG: 
        break; 

      } 


      event = myParser.next(); 

     } 


     parsingComplete = false; 
    } 

    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

FeedItem.java

public class FeedItem { 

String title; 
String link; 
String description; 
String pubDate; 
String thumbnailUrl; 


public FeedItem (String title, String pubDate){ 

    this.title = title; 
    this.pubDate = pubDate; 

} 

public String getTitle() { 
    return title; 
} 



public String getLink() { 
    return link; 
} 

public void setLink(String link) { 
    this.link = link; 
} 

public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

public String getPubDate() { 
    return pubDate; 
} 

public void setPubDate(String pubDate) { 
    this.pubDate = pubDate; 
} 

public String getThumbnailUrl() { 
    return thumbnailUrl; 
} 

public void setThumbnailUrl(String thumbnailUrl) { 
    this.thumbnailUrl = thumbnailUrl; 
} 
} 

答えて

1

私はあなたのパーサのコードをコピーしたので、私は、あなたが間違っていたかわかりませんFeedItemを実行し、両方のxmlを正常に解析しました!

  1. XML - 50 FeedItems
  2. XML - すべてのENDTAG tagNameChild後10あなたのタイトルと日付が空のテキストで上書きされたため、解析には、完全にOKではなかったがFeedItems

ので、私cleared変数。その後、私は正しいタイトルと日付ですべてのFeedItemを手に入れました!

コードの修正:

else if (eventChild == XmlPullParser.END_TAG) { 


    if (myParser.getName().equalsIgnoreCase("item")) { 

     feedItems.add(new FeedItem(title, date)); 
     // Output Test 
     //Log.d("Test ", title); 

    } 
    tagNameChild = ""; 

} 
+0

ありがとうございました。どうやら、それが問題を解決しました。 –

関連する問題