我正在开发这个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连接时,立即抛出异常(当然,这更方便)。
对此有何想法?
答案 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");