SAX-парсер с xmlreader не работает в сотах
Привет, я пытаюсь использовать 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(новый 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 ответа
Ваше устройство не позволяет установить httpconnection. Из-за чего он не получает никаких данных. Это не сбой SAX-парсера. Я сильно подозреваю, что это потому, что вы пытаетесь получить доступ к HTTP-вызовам в потоке пользовательского интерфейса. Вот интересный блог на эту тему.
Просто убедитесь, что вы можете получить доступ к feedUrl
из вашего эмулятора (откуда вы запускаете код) похоже, что по какой-то причине он не может достичь URL.