0

我正在做一个从 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();
    }
}
4

3 回答 3

0

该 URL 似乎不存在。

你可以修改rssUrl.openStream()成两行

  1. URLConnection connection = rssUrl.openConnection()
  2. InputSource inputSource = new InputSource(connection.getInputStream())

通过这种方式,您可以调试以确定您是否能够连接,而不是一步完成。毕竟openStream()openConnection().getInputStream() http://docs.oracle.com/javase/7/docs/api/java/net/URL.html#openStream()的简写

一旦你确定你有一个有效的 URL 并且能够连接,你可以根据需要改回你的实现。

于 2013-07-15T15:14:09.990 回答
0

那么 URL 很可能不存在。:)

您是否尝试在浏览器中访问该 URL 以确认它存在?

此外,当您开始执行 I/O 时会URLConnection抛出 ,IOException因为那是它尝试建立物理连接的时候。如果您希望系统更早地建立连接(例如,确保 URL 存在),您可以使用URLConnection'connect()方法使其更早地连接。(只需确保您已完成必要的连接配置 -0 设置标头等 - 事先!)等待直到您执行 I/O 建立连接并没有错,因此您无需调用connect()来建立连接更早,但如果您愿意,您可以更早地建立连接。

于 2013-07-15T15:02:21.610 回答
0

我试图打开那个 url,它给了我一个 404 错误,没有找到。

于 2013-07-15T15:03:19.587 回答