2013-03-12 2 views
0

im создает rss-канал в моем приложении для Android. Я, однако, продолжаю эту ошибку.error loading rss feed stream null

Вот моя ошибка LogCat ...

03-12 14:04:04.025: E/RSS ERROR(4808): Error loading RSS Feed Stream >> null //android.os.NetworkOnMainThreadException 
03-12 14:04:04.285: I/dalvikvm(4808): threadid=3: reacting to signal 3 
03-12 14:04:04.305: I/dalvikvm(4808): Wrote stack traces to '/data/anr/traces.txt' 
03-12 14:04:04.335: D/ViewRootImpl(4808): pckname = com.tmm.android.rssreader 
03-12 14:04:04.485: D/libEGL(4808): loaded /system/lib/egl/libEGL_mali.so 
03-12 14:04:04.525: D/libEGL(4808): loaded /system/lib/egl/libGLESv1_CM_mali.so 
03-12 14:04:04.535: D/libEGL(4808): loaded /system/lib/egl/libGLESv2_mali.so 
03-12 14:04:04.575: D/OpenGLRenderer(4808): Enabling debug mode 0 

Может кто-нибудь помочь? im новость для RSS-каналов

Я не уверен, в какой части кода я получаю ошибку, любые предложения?

package com.tmm.android.rssreader.util; 

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 

import org.xml.sax.Attributes; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 
import org.xml.sax.XMLReader; 
import org.xml.sax.helpers.DefaultHandler; 

import android.util.Log; 


public class RSSHandler extends DefaultHandler { 

    // Feed and Article objects to use for temporary storage 
    private Article currentArticle = new Article(); 
    private List<Article> articleList = new ArrayList<Article>(); 

    // Number of articles added so far 
    private int articlesAdded = 0; 

    // Number of articles to download 
    private static final int ARTICLES_LIMIT = 15; 

    //Current characters being accumulated 
    StringBuffer chars = new StringBuffer(); 

    /* 
    * This method is called everytime a start element is found (an opening XML marker) 
    * here we always reset the characters StringBuffer as we are only currently interested 
    * in the the text values stored at leaf nodes 
    * 
    * (non-Javadoc) 
    * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) 
    */ 
    public void startElement(String uri, String localName, String qName, Attributes atts) { 
     chars = new StringBuffer(); 
    } 

    /* 
    * This method is called everytime an end element is found (a closing XML marker) 
    * here we check what element is being closed, if it is a relevant leaf node that we are 
    * checking, such as Title, then we get the characters we have accumulated in the StringBuffer 
    * and set the current Article's title to the value 
    * 
    * If this is closing the "Item", it means it is the end of the article, so we add that to the list 
    * and then reset our Article object for the next one on the stream 
    * 
    * 
    * (non-Javadoc) 
    * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String) 
    */ 
    public void endElement(String uri, String localName, String qName) throws SAXException { 

     if (localName.equalsIgnoreCase("title")) 
     { 
      Log.d("LOGGING RSS XML", "Setting article title: " + chars.toString()); 
      currentArticle.setTitle(chars.toString()); 

     } 
     else if (localName.equalsIgnoreCase("description")) 
     { 
      Log.d("LOGGING RSS XML", "Setting article description: " + chars.toString()); 
      currentArticle.setDescription(chars.toString()); 
     } 
     else if (localName.equalsIgnoreCase("pubDate")) 
     { 
      Log.d("LOGGING RSS XML", "Setting article published date: " + chars.toString()); 
      currentArticle.setPubDate(chars.toString()); 
     } 
     else if (localName.equalsIgnoreCase("encoded")) 
     { 
      Log.d("LOGGING RSS XML", "Setting article content: " + chars.toString()); 
      currentArticle.setEncodedContent(chars.toString()); 
     } 
     else if (localName.equalsIgnoreCase("item")) 
     { 

     } 
     else if (localName.equalsIgnoreCase("link")) 
     { 
      try { 
       Log.d("LOGGING RSS XML", "Setting article link url: " + chars.toString()); 
       currentArticle.setUrl(new URL(chars.toString())); 
      } catch (MalformedURLException e) { 
       Log.e("RSA Error", e.getMessage()); 
      } 

     } 

     // Check if looking for article, and if article is complete 
     if (localName.equalsIgnoreCase("item")) { 

      articleList.add(currentArticle); 

      currentArticle = new Article(); 

      // Lets check if we've hit our limit on number of articles 
      articlesAdded++; 
      if (articlesAdded >= ARTICLES_LIMIT) 
      { 
       throw new SAXException(); 
      } 
     } 
    } 


    /* 
    * This method is called when characters are found in between XML markers, however, there is no 
    * guarante that this will be called at the end of the node, or that it will be called only once 
    * , so we just accumulate these and then deal with them in endElement() to be sure we have all the 
    * text 
    * 
    * (non-Javadoc) 
    * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int) 
    */ 
    public void characters(char ch[], int start, int length) { 
     chars.append(new String(ch, start, length)); 
    } 

    /** 
    * This is the entry point to the parser and creates the feed to be parsed 
    * 
    * @param feedUrl 
    * @return 
    */ 
    public List<Article> getLatestArticles(String feedUrl) { 
     URL url = null; 
     try { 

      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 
      XMLReader xr = sp.getXMLReader(); 

      url = new URL(feedUrl); 

      xr.setContentHandler(this); 
      xr.parse(new InputSource(url.openStream())); 


     } catch (IOException e) { 
      Log.e("RSS Handler IO", e.getMessage() + " >> " + e.toString()); 
     } catch (SAXException e) { 
      Log.e("RSS Handler SAX", e.toString()); 
     } catch (ParserConfigurationException e) { 
      Log.e("RSS Handler Parser Config", e.toString()); 
     } 

     return articleList; 
    } 

} 

NEW LogCat LOG ДЛЯ перекодировано RSS READER

03-12 16:01:13.882: W/System.err(5792): java.net.UnknownHostException: Unable to resolve host "www.cnn.com": No address associated with hostname 
03-12 16:01:13.882: W/System.err(5792):  at java.net.InetAddress.lookupHostByName(InetAddress.java:426) 
03-12 16:01:13.912: W/System.err(5792):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 
03-12 16:01:13.912: W/System.err(5792):  at java.net.InetAddress.getAllByName(InetAddress.java:220) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpEngine.connect(HttpEngine.java:303) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 
03-12 16:01:13.912: W/System.err(5792):  at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) 
03-12 16:01:13.922: W/System.err(5792):  at java.net.URL.openStream(URL.java:462) 
03-12 16:01:13.922: W/System.err(5792):  at com.exercise.AndroidRssReader.AndroidRssReader$MyTask.doInBackground(AndroidRssReader.java:43) 
03-12 16:01:13.922: W/System.err(5792):  at com.exercise.AndroidRssReader.AndroidRssReader$MyTask.doInBackground(AndroidRssReader.java:1) 
03-12 16:01:13.922: W/System.err(5792):  at android.os.AsyncTask$2.call(AsyncTask.java:264) 
03-12 16:01:13.922: W/System.err(5792):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
03-12 16:01:13.922: W/System.err(5792):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
03-12 16:01:13.932: W/System.err(5792):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
03-12 16:01:13.932: W/System.err(5792):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
03-12 16:01:13.932: W/System.err(5792):  at java.lang.Thread.run(Thread.java:856) 
03-12 16:01:13.932: W/System.err(5792): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 
03-12 16:01:13.952: W/System.err(5792):  at libcore.io.Posix.getaddrinfo(Native Method) 
03-12 16:01:13.952: W/System.err(5792):  at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55) 
03-12 16:01:13.952: W/System.err(5792):  at java.net.InetAddress.lookupHostByName(InetAddress.java:411) 
03-12 16:01:13.962: W/System.err(5792):  ... 22 more 
+0

Можете ли вы опубликовать фактическую трассировку стека из этого, а не только окончательное сообщение об ошибке, а также часть кода, вызывающего исключение? – MCeley

+0

trace up @MCELEY – prophetz

+0

Пожалуйста, разместите код, используемый для анализа RSS-канала. –

ответ

0
Error loading RSS Feed Stream >> null //android.os.NetworkOnMainThreadException 

Это означает, что вы называете XML парсинг в потоке пользовательского интерфейса. Сам анализ xml получает данные через url.openStream() в getLatestArticles(). Используйте AsyncTask для анализа вашего xml и публикации результата после завершения.

+0

Ive перекодировал часть проекта, im используя Async, но я все равно не получаю ни одного фида. il опубликуйте журнал logcat выше. – prophetz

+0

1. Пожалуйста, просто отправьте трассировку стека, а не весь логарифм в следующий раз. 2. текущая ошибка означает, что у вас возникли проблемы с подключением к cnn.com. Уверены ли вы, что у вас установлен интернет-доступ и что ваш эмулятор/устройство может подключиться к Интернету? (и, пожалуйста, имейте в виду, что технически вы полностью задаете новый вопрос здесь ... в следующий раз создайте новый ...) – WarrenFaith

+0

Да, разрешение в манифесте, планшет подключен к Wi-Fi. Извините за новый вопрос @warrenfaith – prophetz