项目未存储在具有不同 XML 结构的 ArrayList 中
Item doesn't store in ArrayList with different XML structure
目前我正在做一些关于处理 XML 和存储到 ArrayList 的练习,当我使用 this xml. But when I switch to this xml 时它工作得很好,突然数据没有存储在数组列表。我做了一些输出测试,似乎数据没有传递到 feedItems.add(new FeedItem(title,date));
。我希望有人能向我解释我的代码发生了什么以及我该如何解决这个问题。
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;
}
}
我不知道你做错了什么,因为我复制了你的解析器代码和 FeedItem 并成功解析了两个 xml!
- XML - 50 个 FeedItems
- XML - 10 个 FeedItems
但是解析并不完全正确,因为您的标题和日期被空文本覆盖,所以我在每个 EndTag 之后 cleared
tagNameChild
变量。之后我得到了所有具有正确标题和日期的 FeedItems!
代码修复:
else if (eventChild == XmlPullParser.END_TAG) {
if (myParser.getName().equalsIgnoreCase("item")) {
feedItems.add(new FeedItem(title, date));
// Output Test
//Log.d("Test ", title);
}
tagNameChild = "";
}
目前我正在做一些关于处理 XML 和存储到 ArrayList 的练习,当我使用 this xml. But when I switch to this xml 时它工作得很好,突然数据没有存储在数组列表。我做了一些输出测试,似乎数据没有传递到 feedItems.add(new FeedItem(title,date));
。我希望有人能向我解释我的代码发生了什么以及我该如何解决这个问题。
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;
}
}
我不知道你做错了什么,因为我复制了你的解析器代码和 FeedItem 并成功解析了两个 xml!
- XML - 50 个 FeedItems
- XML - 10 个 FeedItems
但是解析并不完全正确,因为您的标题和日期被空文本覆盖,所以我在每个 EndTag 之后 cleared
tagNameChild
变量。之后我得到了所有具有正确标题和日期的 FeedItems!
代码修复:
else if (eventChild == XmlPullParser.END_TAG) {
if (myParser.getName().equalsIgnoreCase("item")) {
feedItems.add(new FeedItem(title, date));
// Output Test
//Log.d("Test ", title);
}
tagNameChild = "";
}