2015-04-15 2 views
0

Я очень новичок в разработке приложений для веб-сайтов и Android, поэтому, пожалуйста, со мной.SAXparser android XML feed problem

У меня очень похожая проблема на следующий вопрос. К сожалению, я не нашел свой ответ после прочтения this question.

Я пытаюсь собрать RSS-канал с моего сайта для своего приложения для Android. Для этого я использую следующий скрипт java.

public class XMLHelper extends DefaultHandler { 

private String URL_MAIN = "http://**.**.***.***/blank/blank/feed/?format=xml"; 
String TAG = "XMLHelper"; 

Boolean currTag = false; 
String currTagVal = ""; 
public ItemValue post = null; 
public ArrayList<ItemValue> posts = new ArrayList<ItemValue>(); 


public void get() { 
    try { 
     SAXParserFactory factory = SAXParserFactory.newInstance(); 
     SAXParser mSaxParser = factory.newSAXParser(); 
     XMLReader mXmlReader = mSaxParser.getXMLReader(); 
     mXmlReader.setContentHandler(this); 
     InputStream mInputStream = new URL(URL_MAIN).openStream(); 
     mXmlReader.parse(new InputSource(mInputStream)); 
    } catch(Exception e) { 
     Log.e(TAG, "Exception: " + e.getMessage()); 
    } 
} 

@Override 
public void characters(char[] ch, int start, int length) 
     throws SAXException { 
    if(currTag) { 
     currTagVal = currTagVal + new String(ch, start, length); 
     currTag = false; 
    } 
} 


@Override 
public void endElement(String uri, String localName, String qName) 
     throws SAXException { 
    currTag = false; 

    if(localName.equalsIgnoreCase("title")) 
     post.setTitle(currTagVal); 

    else if (localName.equalsIgnoreCase("item")) { 
     posts.add(post); 
    } 
} 

@Override 
public void startElement(String uri, String localName, String qName, 
         Attributes attributes) throws SAXException { 
    Log.i(TAG, "TAG: " + localName); 

    currTag = true; 
    currTagVal = ""; 

    if(localName.equals("item")) 
     post = new ItemValue(); 
} 

Это тянет из следующего xml.

<channel> 
<title>Welcome to my website</title> 
<link>http://**.**.***.***/blank/blank/feed</link> 
<atom:link href="http://**.**.***.***/blank/blank/feed/?format=xml" rel="self" type="application/rss+xml"/> 
<description>Activity feed</description> 
<lastBuildDate>Wed, 15 Apr 2015 16:21:17 +0000</lastBuildDate> 
<generator>http://buddypress.org/?v=2.2.1</generator> 
<language>en-US</language> 
<ttl>30</ttl> 
<sy:updatePeriod>hourly</sy:updatePeriod> 
<sy:updateFrequency>2</sy:updateFrequency> 
<item> 
<guid isPermaLink="false">822b2a07599526230c7bae1b1d0a00bf</guid> 
<title> 
gordy77 posted an update in the group ****, **: Now the magic begins 
</title> 
<link>http://**.**.***.***/draft-2/p/9/</link> 
<pubDate>Mon, 13 Apr 2015 16:47:29 +0000</pubDate> 
<content:encoded>...</content:encoded> 
<slash:comments>0</slash:comments> 
</item> 

Теперь, когда я запускаю приложение, я просто получаю пустой экран и следующую ошибку.

E/XMLHelper﹕ Exception: null 

Изменяя следующий код, который я могу получить приложение для запуска, но это тянет только один комментарий «элемент» из RSS канал и повторяет его 3 раза. Это всегда первый «элемент», размещенный на этом канале x3.

if(localName.equals("item")) 
     post = new ItemValue(); 

if(localName.equals("channel")) 
     post = new ItemValue(); 

ответ

0

В этом коде:

if(localName.equalsIgnoreCase("title")) 
     post.setTitle(currTagVal); 

Проверьте post is null, так как тег title может также появиться вне поста

пример:

if(null != post && localName.equalsIgnoreCase("title")) 
     post.setTitle(currTagVal); 
+0

Это зафиксировал его, отлично! – Gordy77

Смежные вопросы