Почему соединение не устанавливается в первый раз? - PullRequest
0 голосов
/ 18 августа 2011

Я хочу отправить свой идентификатор и пароль на сервер и получить ответ от сервера. Вот мой код Это не работает в первый раз. Но я получаю ответ от сервера, если я выполняю свое приложение во второй раз. В первый раз выдается сообщение «Ошибка метода сообщения: -1 ноль». Где я не прав ?? Почему, если () блок выполняется в первый раз ?? не могли бы вы сказать мне.

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 ]

1 голос
/ 18 августа 2011

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();
0 голосов
/ 18 августа 2011

Вот как вы должны отправлять POST-запросы в Android

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

Вы можете прочитать ответ используя:

response.getEntity().getContent()
0 голосов
/ 18 августа 2011

Проверка работоспособности службы сервера с использованием другой технологии и / или классической Java. Вы не сказали в своем вопросе, если вам удастся отличить сервер от проблемы.

из java doc ... getResponseCode возвращает -1, если по ответу невозможно определить код (т. Е. Ответ недействителен по HTTP).

Пример запроса Java https: http://www.java -samples.com / java / POST-toHTTPS-url-free-java-sample-program.htm

попытайтесь закрыть ваш выходной поток после запроса статуса, а не раньше ... это может помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...