SAX-парсер с xmlreader не работает в сотах - PullRequest
0 голосов
/ 20 февраля 2012

Привет. Я пытаюсь использовать программу чтения RSS на сотовой основе, но когда запускаю следующий образец кода и запускаю его (я нажимаю кнопку, чтобы запустить его, и он вылетает).Это код, в котором происходит сбой (посредством отладки):

public List<Article> getLatestArticles(String feedUrl) {
    Log.v("getLatestArticles","entering"+ feedUrl);
    URL url = null;
    try {


        SAXParserFactory spf = SAXParserFactory.newInstance();
        Log.v("getLatestArticles","made instance");
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();
        Log.v("getLatestArticles","made a bunch of stuff");

        url = new URL(feedUrl);
        Log.v("getLatestArticles","made URL");
        xr.setContentHandler(this);
        Log.v("getLatestArticles","RSS is the following" + this.toString());
        Log.v("getLatestArticles","RSS is the following");
        xr.parse(new InputSource(url.openStream()));
        Log.v("getLatestArticles","made parsing possible");

Сбой происходит в xr.parse (new InputSource (url.openStream ()));Я также обнаружил, что сбой происходит только из-за url.openStream ().Если я пытаюсь даже запустить это, я получаю сообщение об ошибке.

И здесь ниже приводится отладочная информация, которую я получаю:

02-20 17:17:56.566: D/AndroidRuntime(449): Shutting down VM
02-20 17:17:56.566: W/dalvikvm(449): threadid=1: thread exiting with uncaught exception (group=0x40014760)
02-20 17:17:56.586: E/AndroidRuntime(449): FATAL EXCEPTION: main
02-20 17:17:56.586: E/AndroidRuntime(449): android.os.NetworkOnMainThreadException
02-20 17:17:56.586: E/AndroidRuntime(449):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077)
02-20 17:17:56.586: E/AndroidRuntime(449):  at java.net.InetAddress.lookupHostByName(InetAddress.java:481)
02-20 17:17:56.586: E/AndroidRuntime(449):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:281)
02-20 17:17:56.586: E/AndroidRuntime(449):  at java.net.InetAddress.getAllByName(InetAddress.java:249)
02-20 17:17:56.586: E/AndroidRuntime(449):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:69)
02-20 17:17:56.586: E/AndroidRuntime(449):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)
02-20 17:17:56.586: E/AndroidRuntime(449):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:304)
02-20 17:17:56.586: E/AndroidRuntime(449):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)
02-20 17:17:56.586: E/AndroidRuntime(449):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:292)
02-20 17:17:56.586: E/AndroidRuntime(449):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:274)
02-20 17:17:56.586: E/AndroidRuntime(449):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1038)
02-20 17:17:56.586: E/AndroidRuntime(449):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:523)
02-20 17:17:56.586: E/AndroidRuntime(449):  at java.net.URL.openStream(URL.java:645)
02-20 17:17:56.586: E/AndroidRuntime(449):  at com.tmm.android.rssreader.util.RSSHandler.getLatestArticles(RSSHandler.java:166)
02-20 17:17:56.586: E/AndroidRuntime(449):  at com.tmm.android.rssreader.reader.RssReader.getLatestRssFeed(RssReader.java:44)
02-20 17:17:56.586: E/AndroidRuntime(449):  at com.tmm.android.rssreader.reader.NewspaperFragment.onCreateView(NewspaperFragment.java:38)
02-20 17:17:56.586: E/AndroidRuntime(449):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:730)
02-20 17:17:56.586: E/AndroidRuntime(449):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:921)
02-20 17:17:56.586: E/AndroidRuntime(449):  at android.app.BackStackRecord.run(BackStackRecord.java:578)
02-20 17:17:56.586: E/AndroidRuntime(449):  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1221)
02-20 17:17:56.586: E/AndroidRuntime(449):  at android.app.FragmentManagerImpl$1.run(FragmentManager.java:375)
02-20 17:17:56.586: E/AndroidRuntime(449):  at android.os.Handler.handleCallback(Handler.java:587)
02-20 17:17:56.586: E/AndroidRuntime(449):  at android.os.Handler.dispatchMessage(Handler.java:92)
02-20 17:17:56.586: E/AndroidRuntime(449):  at android.os.Looper.loop(Looper.java:126)
02-20 17:17:56.586: E/AndroidRuntime(449):  at android.app.ActivityThread.main(ActivityThread.java:3997)
02-20 17:17:56.586: E/AndroidRuntime(449):  at java.lang.reflect.Method.invokeNative(Native Method)
02-20 17:17:56.586: E/AndroidRuntime(449):  at java.lang.reflect.Method.invoke(Method.java:491)
02-20 17:17:56.586: E/AndroidRuntime(449):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
02-20 17:17:56.586: E/AndroidRuntime(449):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
02-20 17:17:56.586: E/AndroidRuntime(449):  at dalvik.system.NativeStart.main(Native Method)

Кто-нибудь сталкивался с этой проблемой или сталкивался с чем-то подобным?Спасибо

Ответы [ 2 ]

0 голосов
/ 20 февраля 2012

Просто убедитесь, что вы можете получить доступ к feedUrl из вашего эмулятора (откуда бы вы ни запускали код), похоже, по какой-то причине он не может достичь URL.

0 голосов
/ 20 февраля 2012

Ваше устройство не позволяет установить httpconnection.Из-за чего он не получает никаких данных.Это не сбой SAX-парсера.Я сильно подозреваю, что это потому, что вы пытаетесь получить доступ к HTTP-вызовам в потоке пользовательского интерфейса.Вот интересный блог на эту тему.

...