我正在尝试运行一个返回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());
答案 0 :(得分:0)
在使用输入流之前,您可以检查它是否可用?
http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html
答案 1 :(得分:0)
根据文件:
表示尝试打开由指定路径名表示的文件失败。
当具有指定路径名的文件不存在时,FileInputStream,FileOutputStream和RandomAccessFile构造函数将抛出此异常。如果文件存在但由于某种原因无法访问,例如当尝试打开只读文件进行写入时,这些构造函数也会抛出它。
由于您的代码大部分时间都在工作而且有时没有工作,我怀疑您正在使用ConnectionTimeOut。
要进一步挖掘问题,请按以下步骤操作。
1)声明一个长变量t1并在try块之前将其初始化为System.currentTimeMillis()。声明一个更长的变量t2并在finally块之后获得当前时间。检查区别。如果差异超过连接超时设置,我们可以断定您正在连接超时。
2)在catch子句中打印完整的异常堆栈跟踪。
3)当您收到此异常时,请检查文件的权限,并确认可以使用读/执行权限访问该文件。
还有一件事 - 由于它在wifi上正常工作而不能在3G中工作,我怀疑连接超时是根本原因。