为什么连接第一次没有建立?

时间:2011-08-18 15:30:29

标签: android http-post

我想发送我的身份证明&密码到服务器并从服务器获取响应。这是我的代码。它不是第一次工作。但是如果我第二次执行我的应用程序,我会从服务器获得响应。第一次抛出“Post方法失败:-1 null”。我哪里错了?为什么if()块在第一次执行?你能告诉我吗?

HttpsURLConnection con = null;
String httpsURL = "https://www.abc.com/login";
String query = "id=xyz&password=pqr";
URL url = new URL(httpsURL); 
con = (HttpsURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-length", String.valueOf(query.length()));
con.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
con.setRequestProperty("User-Agent","Mozilla/4.0(compatible; MSIE 5.0; Windows 98; DigExt)"); 
con.setDoInput(true);
con.setDoOutput(true);  
DataOutputStream output = new DataOutputStream(con.getOutputStream());
output.writeBytes(query);
output.close();  
int respCode = con.getResponseCode();

if (respCode != HttpsURLConnection.HTTP_OK) 
{
  throw new Exception("POST method failed: " + con.getResponseCode()+ "\t" + con.getResponseMessage()); }
 else {
//read the content from server
}

3 个答案:

答案 0 :(得分:1)

1 /建议使用apache HttpClient而不是URLConnection(参见http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html

2 /用于登录和密码,为什么不使用Http身份验证? android支持基本和摘要。

3 /至于你的问题,你不要关闭底层的outputStream。

你应该这样做:

OutputStream os = con.getOutputStream();
DataOutputStream output = new DataOutputStream(os);
output.writeBytes(query);
output.close();
os.close();

答案 1 :(得分:0)

使用其他技术和/或经典java检查服务器服务有效性。如果你成功地将服务器与问题区分开来,你在问题中没有说。

来自java doc ...如果无法从响应中识别出代码,则getResponseCode返回-1(即,响应不是有效的HTTP)。

Java https发布请求示例:http://www.java-samples.com/java/POST-toHTTPS-url-free-java-sample-program.htm

尝试在查询状态后关闭输出流,而不是在......之前关闭

答案 2 :(得分:0)

以下是您应该如何在Android中发送POST请求

HttpPost httpGet = new HttpPost(server + "/login?email="+username+"&password="+password);
DefaultHttpClient httpClient = new DefaultHttpClient();         
HttpResponse response = httpClient.execute(httpGet);

您可以使用以下方式阅读回复:

response.getEntity().getContent()