【发布时间】:2014-05-19 13:22:14
【问题描述】:
我正在尝试使用 HttpURLClient 将一些 POST 数据发送到使用下面显示的 HttpRestClient 类的服务器。执行时
conn.setDoInput(true);
我明白了
java.lang.IllegalStateException: Already connected
我卸载了应用程序,但仍然出现同样的错误。
在我见过的所有示例中,openConnection 都是在 setDoInput 之前调用的。如果,顾名思义,openConnection 打开一个连接,它不应该在`setDoInput 之前使用,对吧?我错过了什么?
也许在某个时候它在执行disconnect 之前崩溃了。这可能是原因吗?如果是这样,我该如何断开旧连接?
public class HttpRestClient {
static public int post(String urlStr, List<NameValuePair> data){
HttpURLConnection conn = null;
try {
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(data));
writer.flush();
writer.close();
os.close();
InputStream is = conn.getInputStream();
String dude = readIt(is);
return 1;
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
finally {
if(conn!=null) conn.disconnect();
}
}
}
【问题讨论】:
-
您正在连接的连接由于您使用的静态功能而尚未断开
-
尝试完全删除
conn.connect();(你不需要它)。还是有问题?如果是,请编辑您的帖子并向我们展示堆栈跟踪。 -
@Rod_Algonquin 我看不出关于
static的问题。 -
@hgoebl 谢谢,我删除了无用的
conn.connect() -
@Rod_Algonquin 这似乎不是问题:我尝试使用我的静态函数同时执行多个请求并且它有效,所以我猜它每次都会打开一个不同的连接。