0

我想RSS在 Android 应用程序中显示一个 Feed。XML基本上,它当然是从文件中读取的。我想在 Android 中显示两个项目listViewtitle, description.

我希望提要这样做:

title
description

title
description

title
description

title
description

相反,它正在这样做:

title
title
title
title
title
title

description
description
description
description
description
description

我可以根据这段代码的情况来了解原因,但我不知道如何像示例 1 那样进行布局。

这是代码:

private class RSSHandler extends DefaultHandler {

    public void startElement(String uri, String localName, String qName,
            Attributes attrs) throws SAXException {

        if (localName.equals("item")) {
            item = true;
        }

        if (localName.equalsIgnoreCase("title")) {
            fTitle = true;
        }

        if (localName.equalsIgnoreCase("description")) {
            fDesc = true;
        }

    }

    public void endElement(String namespaceURI, String localName,
            String qName) throws SAXException {

    }

    public void characters(char[] ch, int start, int length)
            throws SAXException {

        if (fTitle) {
            titleResult = titleResult + (new String(ch, start, length))
                    + "\t\n\n";
            fTitle = false;
        }

        if (fDesc) {
            rssResult = rssResult + (new String(ch, start, length))
                    + "\t\n\n";
            fDesc = false;
        }

    }

}
4

2 回答 2

1

您正在维护两个字符串并稍后将它们组合起来,您应该在构建它们时将它们组合起来。根据您的示例,您应该使用以下内容:

public void characters(char[] ch, int start, int length)
        throws SAXException {

    if (fTitle) {
        titleResult = titleResult + (new String(ch, start, length))
                + "\t\n";
        fTitle = false;
    }

    if (fDesc) {
        titleResult = titleResult + (new String(ch, start, length))
                + "\t\n\n";
        fDesc = false;
    }
}
于 2012-11-16T19:32:36.337 回答
1

相反,你这样做:

if (fTitle) {
        titleResult = titleResult + (new String(ch, start, length))
                + "\t\n\n";
        fTitle = false;
    }

if (fDesc) {
        rssResult = rssResult + (new String(ch, start, length))
                + "\t\n\n";
        fDesc = false;
    }

看你正在编写两个字符串,一个有很多标题,另一个有很多描述。

尝试在那里制作List<String>并添加你的对象:

List<String> feeds = new ArrayList<String>();
...
public void characters(char[] ch, int start, int length)
        throws SAXException {

    String feed = new String("");
    if (fTitle) {
        feed = new String(ch, start, length)
                + "\t\n\n";
        fTitle = false;
    }

    if (fDesc) {
        feed = feed + (new String(ch, start, length))
                + "\t\n\n";
        fDesc = false;
    }
    feeds.add(feed);
}

然后您可以使用打印来显示您的列表:

for(String feed : feeds) {
  <Use your string>
  feed.doSometing();
}

但最好的做法是制作一个 Feed 对象来存储标题和描述,例如:

List<Feed> feeds = new ArrayList<Feed>();
Feed feed = new Feed(title, description);
feeds.add(feed);
for(Feed feed : feeds) {
  feed.getTitle().doSometing();
  feed.getDescription().doSometing();
}

=)

于 2012-11-16T19:40:31.840 回答