我正在做一个从url读取xml并在屏幕上显示它的应用程序,但是当我想读取答案时会给我一个FileNotFoundException
这是代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView rss = (ListView) findViewById(R.id.list);
try {
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("acceso!a!backend", "nu3v0!1nf0b43!2013".toCharArray());
}
});
URL rssUrl = new URL("http://ec2-54-224-94-185.compute-1.amazonaws.com/adjuntos/162/rss/home_mobile.xmlx");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
XMLReader xmlReader = saxParser.getXMLReader();
RSSHandler rssHandler = new RSSHandler();
xmlReader.setContentHandler(rssHandler);
////////这里我得到了FileNotFoundException
InputSource inputSource = new InputSource(rssUrl.openStream());
xmlReader.parse(inputSource);
NoticiasAdapter na = new NoticiasAdapter(this ,rssHandler.getChannel());
rss.setAdapter(na);
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
那么URL很可能不存在。 :)
您是否尝试在浏览器中访问该网址以确认其存在?
此外,当您开始执行I / O时,URLConnection
会抛出IOException
,因为那时它会尝试建立物理连接。如果您希望系统提前建立连接(例如,确保URL存在),则可以使用URLConnection
's connect()
method使其更早连接。 (只需确保你已经完成了必要的连接配置-0setting标头等 - 事先!)等待你做I / O连接没有什么不对,所以你不需要 调用connect()
以更早地建立连接,但如果您愿意,可以提前建立连接。
答案 1 :(得分:0)
我试图打开该网址,但却找不到404错误。
答案 2 :(得分:0)
网址似乎不存在。
您可以将rssUrl.openStream()
修改为两行
URLConnection connection = rssUrl.openConnection()
InputSource inputSource = new InputSource(connection.getInputStream())
通过这种方式,您可以调试以确定您是否能够连接而不是一步完成所有操作。毕竟openStream()
是openConnection().getInputStream()
http://docs.oracle.com/javase/7/docs/api/java/net/URL.html#openStream()
一旦你发现你有一个有效的URL并且能够连接,你可以根据需要改回你的实现。