【问题标题】:No IOException on Outputstream when dataconnection lost数据连接丢失时输出流上没有 IOException
【发布时间】:2013-03-19 06:30:36
【问题描述】:

我正在开发这个 android 应用程序,它基本上将图像上传到 web 服务。 我有一个异步任务,我使用以下代码将文件发送到服务器:

protected Boolean doInBackground(byte[]... params) {
     HttpURLConnection connection = getConnection();
     BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream()); 
     Log.d("OutputStream", "stream created, about to write");
     out.write(params[0]);
     Log.d("OutputStream", "all bytes written");
     out.close();
}

当然,这段代码被包装在一个 try catch 中,捕获 IOExceptions 等。 问题是,当我中断连接 after 我看到第一个日志文本时,永远不会抛出异常,或者只有在很长一段时间(大约 20 分钟左右)之后才会抛出异常,这不会产生任何完全有感觉。

HttpURLConnection 是这样设置的:

urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");         
urlConnection.setRequestProperty("Content-Type", this.contentType);
urlConnection.setRequestProperty("User-Agent", String.format("custom-user-agent/%d", R.integer.version_code));
urlConnection.addRequestProperty("SessionID", this.sessionID);
urlConnection.setDoOutput(true);
urlConnection.setConnectTimeout(30000);
urlConnection.setReadTimeout(30000);
urlConnection.setChunkedStreamingMode(0);
urlConnection.setUseCaches(false);
urlConnection.connect();

有趣的是,这只发生在中断 EDGE/3G 连接时。当我中断 wifi 连接时,立即抛出异常(当然,这更方便)。

对此有任何想法吗?

【问题讨论】:

    标签: android post timeout httpurlconnection 3g


    【解决方案1】:

    不久前,我们也遇到过这个问题,但仅限于搭载 Android 2.3.4 的三星 Galaxy SII。所有其他设备都没有这个问题。没有办法解决这个问题。

    【讨论】:

      【解决方案2】:

      您不需要使用 urlConnection.connect():当您执行 .getOutputStream() 时,连接是隐式打开的。 此外,如果您制作了 .connect(),则无法在 .getOutputStream() 之前完成。 另外,必须设置 Content-Type 头:

      urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
      

      【讨论】:

      • 内容类型设置为“application/octet-stream”。但是当连接中断时,标题真的很重要吗?不过,我会删除 .connect(),谢谢。
      • 好的,我还没有意识到您已经设置了 Content-Type。无论如何,我认为标题在这个问题上并不重要,就像你说的那样。现在可以用了吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 2020-03-14
      • 1970-01-01
      相关资源
      最近更新 更多