我正在开发这个 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 等。问题是当我在看到第一个 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 连接时,立即抛出异常(当然,这更方便)。
对此有任何想法吗?