当dataconnection丢失时,Outputstream上没有IOException

时间:2013-03-28 17:24:47

标签: android post timeout httpurlconnection 3g

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

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等。 问题是,当我在之后中断连接时,我看到第一个logtext,一个异常永远不会被抛出或者只是在很长一段时间之后(大约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连接时,立即抛出异常(当然,这更方便)。

对此有何想法?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您不需要使用urlConnection.connect():当您执行.getOutputStream()时,连接是开放式的。 此外,如果您创建.connect(),则无法在.getOutputStream()之前创建它。 此外,您必须设置Content-Type标题:

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