0

我正在尝试运行一个返回 XML 格式的 Web 服务,但它有时会在 3G 网络上抛出 FileNotFoundException,有时在 WIFI 网络上会成功运行

这是连接的代码:

      @Override
    protected ArrayList<NewsItemVO> doInBackground(Void... args) {


        try {
            URLConnection conn = new URL(feedUrl).openConnection();
            conn.setConnectTimeout(20000);
            conn.setReadTimeout(20000);
            InputStream in = new BufferedInputStream(conn.getInputStream());
          }
}

这是引发异常的行

 InputStream in = new BufferedInputStream(conn.getInputStream());
4

2 回答 2

0

根据文档:

表示尝试打开由指定路径名表示的文件失败的信号。

当具有指定路径名的文件不存在时,FileInputStream、FileOutputStream 和 RandomAccessFile 构造函数将引发此异常。如果文件确实存在但由于某种原因不可访问,例如当试图打开只读文件进行写入时,这些构造函数也会抛出它。

由于您的代码在大多数情况下都在工作,而在某些时候不工作,我怀疑您正在获得 ConnectionTimeOut。

要进一步挖掘问题,请按照以下步骤操作。

1) 声明一个长变量 t1 并在 try 块之前将其初始化为 System.currentTimeMillis()。再声明一个长变量 t2 并在 finally 块后获取当前时间。检查差异。如果差异大于连接超时设置,我们可以断定您正在获得连接超时。

2) 在 catch 子句中打印完整的异常堆栈跟踪。

3) 当您收到此异常时,请检查文件的权限并确认该文件可通过读取/执行权限访问。

还有一件事 - 由于它在 wifi 中工作正常而在 3G 中不工作,我怀疑连接超时是根本原因。

于 2015-08-20T12:43:37.147 回答
0

在使用输入流之前,您可以检查它是否可用?

http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html

于 2015-08-17T10:37:39.477 回答