2014-01-07 2 views
0

URL에서 XML을 구문 분석하여 목록보기에 표시하려고했습니다. 그러나, 목록보기 같은 을 보여주는이Android Async XML 구문 분석

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

여기

내 코드

MainActivity있는 [내 명성 (10) 아래에 있기 때문에 내가 직접 여기에 모든 이미지를 게시 할 수 없습니다]

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

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

    } 
} 

RssReader 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; 
      } 
     } 
    } 
} 

나는 문제를 알아낼 수 없습니다. 내 질문은 내가 뭘 잘못하고 있는거야?

+1

당신은 내가 두 개의 문자열 제목 및 설명을()'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

'에서'toString를 오버라이드 (override) 해, 필요가있다. 어떻게 동시에 두 문자열을 반환 할 수 있습니까? –

+0

수정 된 답변입니다. 클래스에 두 개의 String 속성이 있다고 가정합니다. 반환 할 형식화 된 String 값을 만드는 방법은 사용자에게 달려 있습니다. ':'문자를 사용하여 2 개의 문자열을 구분했습니다. –

관련 문제