3

Я пытаюсь создать функцию поиска места в своем приложении с помощью api GoogleMap для Android. Я хочу заполнить AutoComplete TextView, поскольку пользователь вводит имя места. Но я получаю эту Excetion при вызове urlConnection.connect(); заявление:javax.net.ssl.SSLProtocolException при вызове HttpUrlConnection.connect()

javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb911cd50: Failure in SSL library, usually a protocol error 
error:1407743E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert inappropriate fallback (external/openssl/ssl/s23_clnt.c:765 0xae688edd:0x00000000) 

Ниже приведен код, я использую:

private String downloadUrl(String strUrl) throws IOException { 
    String data = ""; 
    InputStream iStream = null; 
    HttpURLConnection urlConnection = null; 
    try { 
     URL url = new URL(strUrl); 

     // Creating an http connection to communicate with url 
     urlConnection = (HttpURLConnection) url.openConnection(); 

     // Connecting to url 
     urlConnection.connect(); 

     // Reading data from url 
     iStream = urlConnection.getInputStream(); 

     BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); 

     StringBuffer sb = new StringBuffer(); 

     String line = ""; 
     while ((line = br.readLine()) != null) { 
      sb.append(line); 
     } 

     data = sb.toString(); 

     br.close(); 

    } catch (Exception e) { 
     Log.d("Exception while downloading url", e.toString()); 
    } finally { 
     iStream.close(); 
     urlConnection.disconnect(); 
    } 
    return data; 
} 

private String getPlacesUrl(String qry) { 
     try { 
      qry = "input=" + URLEncoder.encode(qry, "utf-8"); 
     } catch (UnsupportedEncodingException e1) { 
      e1.printStackTrace(); 
     } 

     // Sensor enabled 
     String sensor = "sensor=false"; 


     // place type to be searched 
     String types = "types=geocode"; 

     // Building the parameters to the web service 
     String parameters = qry + "&" + types + "&" + sensor + "&" + mKey; 

     // Output format 
     String output = "json"; 


     // Building the url to the web service 
     String url = "https://maps.googleapis.com/maps/api/place/autocomplete/" + output + "?" + parameters; 

     return url; 
    } 

Я зарегистрировал свои приложения пакета и SHA1 моей системы в Google консоли , URL, что я получаю после вызова getPlaceUrl() метод имеет такого типа:

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=b&types=geocode&sensor=false&key=API_KEY

Пожалуйста, помогите мне решить эту проблему.

+0

см http://stackoverflow.com/questions/20741405/javax-net-ssl-sslexception-ssl-handshake-aborted-connection-reset-by-peer-while. может быть полезно –

+0

@shayanpourvatan здесь сервер является сервером GoogleMap. Я не думаю, что поддержка протокола TLS 1.0 не существует – Jaguar

+0

Какой уровень устройства/API вы выполняете? Протоколы SSL и TLS и шифры зависят от используемой ОС. – Robert

ответ

0

У меня почти такая же проблема. Мой LogCat следующим образом:

javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL рукопожатия прерванный: SSL = 0x60b486b8: Ошибка в библиотеке SSL, как правило, протокол ошибок SSL процедуры: SSL23_GET_SERVER_HELLO: TLSv1 предупредит неуместное запасной вариант (внешний/OpenSSL/SSL/s23_clnt.c: 744 0x5ea50d74: 0x00000000)

Наконец, я нашел решение это изменить httpURLConnection.setHostnameVerifier HostnameVerifier проверить возвращаемое значение от ложного к истине, но я не знать основную причину. Есть ли какие-нибудь подсказки?

 httpURLConnection.setHostnameVerifier(new HostnameVerifier() { 
      @Override 
      public boolean verify(String hostname, SSLSession session) { 
       // TODO Auto-generated method stub 
       // return false; 
       return true; 
      } 
     }); 
+0

, вы, вероятно, имеете в виду 'HttpsURLConnection' –

Смежные вопросы