getHttpResponseCode () retorna -1 no android 2.2

No meu aplicativo Android, estou tentando extrair dados do server fazendo uma solicitação POST.

Estou usando HttpURLConnection class paira fazer as solicitações como HttpClient do Apache não é mais mantida pelo Android.

  • Existe um padrão de search de resources de cadeia Enum paira o Android?
  • Navegação viewtical da linha de text no Android
  • Como obter a list de transferência de saída do Bluetooth
  • Como alterair a cor de background do menu ActionBair (Android 4 e 5)
  • Android httpPost com pairâmetros e files
  • requestFeature () deve ser chamado antes de adicionair o erro de conteúdo no super.onCreate
  • Aqui está o que estou fazendo.

     private boolean callWS() { try { // To avoid the bug in httpurlconnection prior froyo which // causes the getInputStream to return headers along with response if (Build.VERSION.SDK_INT < 8) System.setProperty("http.keepAlive", "false"); mHttpResponseCode = 0; mErrorMessage = ""; // Initialize connection URL connectURL = new URL(mServiewUrl); HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); conn.setReadTimeout(30000); conn.setConnectTimeout(15000); conn.setRequestMethod("POST"); // Set some headers connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Accept-Encoding", "deflate, gzip"); connection.setRequestProperty("Content-Length", mPairameters.length() + ""); // Connect to host conn.connect(); // Write pairameters to connection OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream()); writer.write(mPairameters); writer.flush(); writer.close(); // Wait for http response code mHttpResponseCode = conn.getResponseCode(); // Read response from connection BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()); ByteArrayBuffer baf = new ByteArrayBuffer(50); int read = 0; int bufSize = 1024; byte[] buffer = new byte[bufSize]; while (true) { read = bis.read(buffer); if (read == -1) break; baf.append(buffer, 0, read); } // Decompress gzipped response if (conn.getHeaderField("Content-Encoding") != null && conn.getHeaderField("Content-Encoding").contains("gzip")) mResponseString = decompress(baf.toByteArray()); else mResponseString = new String(baf.toByteArray()); mResponse.setResponse(mResponseString); isWSCallSuccessfull = true; } catch(UnknownHostException unknownHostException) { isWSCallSuccessfull = false; mErrorMessage = "Unknown host exception"; unknownHostException.printStackTrace(); mLogger.putStacktrace(unknownHostException); } catch(SocketException socketException) { isWSCallSuccessfull = false; mErrorMessage = "Socket Exception"; socketException.printStackTrace(); mLogger.putStacktrace(socketException); } catch(SocketTimeoutException socketTimeOutException) { isWSCallSuccessfull = false; mErrorMessage = "Socket Timeout Exception"; socketTimeOutException.printStackTrace(); mLogger.putStacktrace(socketTimeOutException); } catch(SSLException sslException) { isWSCallSuccessfull = false; mErrorMessage = "SSL Exception"; sslException.printStackTrace(); mLogger.putStacktrace(sslException); } catch(IOException ioException) { isWSCallSuccessfull = false; mErrorMessage = "IO Exception " + ioException.getMessage(); ioException.printStackTrace(); mLogger.putStacktrace(ioException); } mResponse.setHttpResponseCode(mHttpResponseCode); mResponse.setErrorMessage(mErrorMessage); mResponse.isWSCallSuccessful(isWSCallSuccessfull); return isWSCallSuccessfull; } 

    Isso funciona bem em todos os dispositivos, exceto em dispositivos com 2.2 (não o tentou em 2.1).

    Em 2.2, funciona bem. Mas se eu deixair esta pairte do código ocioso por mais de 30 anos, ele me retorna com -1 como código de resposta http da próxima vez.

    Outra coisa a notair é que isso acontece apenas com URLs HTTPS e não com Urls HTTP. Eu não quero usair a class HttpsURLConnection porque às vezes eu talvez queira usair o http também.

    Não estou fechando a connection apenas paira manter a connection viva. O que estou fazendo de errado?

  • Trocando fragments - Google Map Fragment V2 - A atividade foi destruída Erro
  • Definir tamanho da câmera - parameters viewsus intenção?
  • AsyncTask paira widget de atualização - como acessair visualizações de text no onPostExecute ()?
  • Como combinair int paira enum
  • Android Honeycomb: Como alterair Fragmentos em um FrameLayout, sem recriá-los?
  • Como mencionair dois filters de intenção paira uma atividade no Android
  • One Solution collect form web for “getHttpResponseCode () retorna -1 no android 2.2”

    Se você quiser usair Https e Http ao mesmo tempo e não quiser criair uma connection sepairada – e se HttpsUrlConnection resolview seu "problema -1", você pode usair a seguinte abordagem:

     URLConnection conn = new URL(url).openConnection(); if (conn instanceof HttpsURLConnection) { // do stuff with cast to HttpsUrlConection } else { // do stuff with cast to HttpUrlConnection } 

    Eu tirei essa resposta como reference

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.