首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android异步XML解析

Android异步XML解析
EN

Stack Overflow用户
提问于 2014-01-07 17:00:22
回答 1查看 156关注 0票数 0

我试图从url中解析XML并在listview上显示它。但是,listview是这样显示的

http://postimg.org/image/ucbdjpwj5/

我不能直接在这里发照片,因为我的名声还不到10岁

这是我的密码

MainActivity

代码语言:javascript
复制
getRssDataTask ts = new getRssDataTask();
    ts.execute("http://www.xyzapp.com/feed");
}


private class getRssDataTask extends AsyncTask<String, Void, List<NewsItem>>{

    @Override
    protected List<NewsItem> doInBackground(String... params) {
        // TODO Auto-generated method stub

        try {
                // Create RSS reader
                RSSReader rssReader = new RSSReader(params[0]);

                // Parse RSS, get items
                return rssReader.getItems();

        } catch (Exception e) {
                Log.e("App", e.getMessage());
        }

        return null;
    }

    @Override
    protected void onPostExecute(List<NewsItem> result) {

        ListView Items = (ListView) findViewById(R.id.listView);

        // Create a list adapter
        ArrayAdapter<NewsItem> rs = new ArrayAdapter<NewsItem>(local,android.R.layout.simple_list_item_1, result);
        // Set list adapter for the ListView
        Items.setAdapter(rs);

RssHandler

代码语言:javascript
复制
public class RssHandler extends DefaultHandler {

    private List<NewsItem> rssItem;

    private NewsItem currentItem;

    private boolean parsingTitle;

    private boolean parsingDes;

    public RssHandler() {
        // TODO Auto-generated constructor stub

        rssItem = new ArrayList<NewsItem>();
    }

    public List<NewsItem> getItems() {
        return rssItem;
    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        if ("item".equals(qName)) {
            currentItem = new NewsItem();
        } else if ("title".equals(qName)) {
            parsingTitle = true;
        } else if ("content:encoded".equals(qName)) {
            parsingDes = true;
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        // TODO Auto-generated method stub
        if ("item".equals(qName)) {
            rssItem.add(currentItem);
            currentItem = null;
        } else if ("title".equals(qName)) {
            parsingTitle = false;
        } else if ("content:encoded".equals(qName)) {
            parsingDes = false;
        }

    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        if (parsingTitle) {
            if (currentItem != null)
                currentItem.setTitle(new String(ch, start, length));
        } else if (parsingDes) {
            if (currentItem != null) {
                currentItem.setDes(new String(ch, start, length));
                parsingDes = false;
            }
        }
    }
}

RssReader

代码语言:javascript
复制
public class RSSReader {

    private String RssUrl;
    public RSSReader(String RssUrl) {
        // TODO Auto-generated constructor stub
        this.RssUrl = RssUrl;
    }

    public List<NewsItem> getItems() throws Exception{

        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser saxParser = factory.newSAXParser();

        RssHandler handler = new RssHandler();

        saxParser.parse(RssUrl, handler);

        return handler.getItems();

    }
}

我想不出这个问题。我的问题是我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2014-01-07 17:08:17

在NewsItem中实现以下方法:

代码语言:javascript
复制
@Override
public String toString() {
  // return a String value representing this object
  // Assuming two class String properties called title and description
  return title + ": " + description;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20977493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档