0
我嘗試使用DOM4j爲Android上的XML RSS源創建階段。我將dom4j.jar添加到lib \和用戶權限。DOM4j在Android上無法正常工作
<uses-permission android:name="android.permission.INTERNET"/>
我也在純Java項目中編譯這個源代碼,它的工作原理! 如果對Android有任何限制(如果有,我可以使用什麼方法),我很困惑,或者只是我犯了一些錯誤。 logcat中的
配件:
03-15 23:27:10.611: W/System.err(10453): org.dom4j.DocumentException: Couldn't open http://tw.news.yahoo.com/rss/ Nested exception: Couldn't open http://tw.news.yahoo.com/rss/
03-15 23:27:10.621: W/System.err(10453): at org.dom4j.io.SAXReader.read(SAXReader.java:484)
03-15 23:27:10.621: W/System.err(10453): at org.dom4j.io.SAXReader.read(SAXReader.java:291)
03-15 23:27:10.621: W/System.err(10453): at tw.danny.rss_dom4j.RSSDom4jMainActivity.onCreate(RSSDom4jMainActivity.java:28)
03-15 23:27:10.621: W/System.err(10453): at android.app.Activity.performCreate(Activity.java:5206)
03-15 23:27:10.626: W/System.err(10453): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
03-15 23:27:10.626: W/System.err(10453): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
...
這裏是主要活動的onCreate功能:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rssdom4j_main);
try {
URL url = new URL("http://tw.news.yahoo.com/rss/");
SAXReader saxReader = new SAXReader();
//?
Document document = saxReader.read(url);
Element channel = (Element) document.getRootElement().element(
"channel");
for (Iterator i = channel.elementIterator("item"); i.hasNext();) {
Element element = (Element) i.next();
System.out.println("title: " + element.elementText("title"));
String descrip_original = element.elementText("description");
if (descrip_original.startsWith("<p>")) {
// address html-like layout
System.out.println(descrip_original.substring(
descrip_original.indexOf("</a>") + 4,
descrip_original.length() - 1));
}
System.out.println("link: " + element.elementText("link"));
System.out
.println("pubDate: " + element.elementText("pubDate"));
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
問題在此行中,可能會出現:
SAXReader saxReader = new SAXReader();
非常感謝,它的工作:) 我還有一個問題。爲什麼我不能在另一個.java類中寫入phasher,並在線程中調用像RSSPhasher.parse()這樣的方法? – user2174595 2013-03-16 04:35:57
只要你從主UI線程中調用任何網絡操作,你就可以。在解析輸入流時,您需要小心SAX解析器。如果您的查詢返回大型數據集,則可能會返回'read()'方法,但後續解析可能會再次訪問網絡。 DOM解析器不會有這個問題,因爲它們只是一次讀取/構建,但是當然你需要更高的內存需求。 – 323go 2013-03-16 05:33:01
謝謝你的回答。我改變使用DOM解析器,它的工作原理。 – user2174595 2013-03-22 15:02:09