gpt4 book ai didi

java - 列表填充了最后的数据而不是尊重插入顺序(Android)

转载 作者:行者123 更新时间:2023-11-30 10:33:53 25 4
gpt4 key购买 nike

我有一个如下所示的 XML 解析器:

public class XMLParser {

public static void XMLParser(){

}

public List<itemRSS> parse(InputStream inputStream) throws XmlPullParserException,
IOException {
String title = null;
String link = null;
String description = null;
boolean isItem = false;
List<itemRSS> items = new ArrayList<>();

try {
XmlPullParser xmlPullParser = Xml.newPullParser();
xmlPullParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
xmlPullParser.setInput(inputStream, null);

xmlPullParser.nextTag();
while (xmlPullParser.next() != XmlPullParser.END_DOCUMENT) {
int eventType = xmlPullParser.getEventType();

String name = xmlPullParser.getName();
if(name == null)
continue;

if(eventType == XmlPullParser.END_TAG) {
if(name.equalsIgnoreCase("item")) {
isItem = false;
}
continue;
}

if (eventType == XmlPullParser.START_TAG) {
if(name.equalsIgnoreCase("item")) {
isItem = true;
continue;
}
}

Log.d("MyXmlParser", "Parsing name ==> " + name);
String result = "";
if (xmlPullParser.next() == XmlPullParser.TEXT) {
result = xmlPullParser.getText();
xmlPullParser.nextTag();
}

if (name.equalsIgnoreCase("title")) {
title = result;
} else if (name.equalsIgnoreCase("link")) {
link = result;
} else if (name.equalsIgnoreCase("description")) {
description = result;
}

if (title != null && link != null && description != null) {
if(isItem) {
itemRSS item = new itemRSS(title, description, link);
items.add(item);
}
else {
System.out.println("leo: " + title);
//mFeedTitle = title;
//mFeedLink = link;
// mFeedDescription = description;
}

title = null;
link = null;
description = null;
isItem = false;
}
}

return items;
} finally {
inputStream.close();
}
}

}

这是我在代码中无法正常工作的情况

if (title != null && link != null && description != null) {
if(isItem) {
itemRSS item = new itemRSS(title, description, link);
items.add(item);
}

基本上,当执行完成时,它不是按 {1,2,3,4} 的顺序添加到列表中,而是看起来像 {4,4,4,4}。

这怎么会发生?我的 Intent 是做一个简单的 RSS 提要阅读器,所以这个解析器是我如何将数据从提要获取到数组,然后我将数组设置为 recycledView 的适配器。到目前为止工作正常,但它只是写了一长串最后添加的标题而不是正确的顺序。

我跟踪到上面代码的错误,我很确定这就是问题所在,但我不知道如何解决这个问题。

提前致谢。

最佳答案

代码“看起来”是正确的,因为您在每次循环迭代中创建一个 项目对象(有时人们一直在添加相同 对象)。

真正的答案在这里:您需要更多跟踪(或学习如何使用调试器)。只需确保您可以观察所有重要信息。

鉴于您的更新,很可能您的 itemRSS 类正在使用 static 字段?你知道类的所有实例何时共享它们的字段;这可以解释我们在这里看到的情况。

关于java - 列表填充了最后的数据而不是尊重插入顺序(Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41979924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com