2014-01-07 66 views
0

我試圖從URL解析XML並在列表視圖中顯示它。但是,列表視圖是顯示 這樣Android異步XML解析

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

[我不能發表任何圖像直接在這裏,是因爲我的名氣是在10]

這裏是我的代碼

MainActivity

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); 

Rs sHandler

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

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(); 

    } 
} 

我無法找出問題。我的問題是我在做什麼錯誤?

+1

你需要重寫'的toString()''中NewsItem' – Raghunandan

回答

0

在NewsItem實現下面的方法:

@Override 
public String toString() { 
    // return a String value representing this object 
    // Assuming two class String properties called title and description 
    return title + ": " + description; 
} 
+0

我有兩個字符串標題和說明。我怎樣才能同時返回兩個字符串? –

+0

編輯答案。假設你的類中有兩個String屬性。這取決於你如何創建一個格式化的字符串值來返回。我用':'字符分隔了2個字符串 –