【发布时间】:2015-04-05 05:48:44
【问题描述】:
我有这个代码:
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(10000);
conn.setRequestMethod(type);
conn.setDoOutput(output);
if(output)
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setDoInput(true);
conn.connect();
OutputStream out = null;
if(output)
out = conn.getOutputStream();
InputStream in = conn.getInputStream();
if(output) {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
bw.write(getQuery(params));
bw.flush();
}
// Get output
BufferedReader br = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String line;
while((line = br.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
in.close();
if(output)
out.close();
// Do stuff with the output
当output 为真(执行 POST 或 PUT 请求)且未完成请求时,此代码会引发 IOException。我尝试对conn.connect()、写调用和流创建块进行重新排序,但没有进行任何排列。
在所有情况下,BufferedReader 都可以正常工作并且不会引发任何异常。 getQuery 正确返回一个 URL 编码的字符串。
这是来自 IOException 的堆栈跟踪:
java.io.IOException: closed
W/System.err﹕ at com.android.okio.RealBufferedSink$1.write(RealBufferedSink.java:129)
W/System.err﹕ at java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:167)
W/System.err﹕ at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:158)
W/System.err﹕ at java.io.BufferedWriter.flush(BufferedWriter.java:124)
W/System.err﹕ at org.project.NetworkHelper.doRequest(NetworkHelper.java:57)
W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
最终发生的情况是请求通过了,但没有任何 POST 或 PUT 数据最终到达服务器 - 就像写入调用从未发生过一样。
有谁知道是什么原因造成的,或者如何解决?
【问题讨论】:
标签: java android httpurlconnection