javax.net.ssl.SSLPeerUnverifiedException: Brak certyfikatu równorzędnego podczas pracy z api miejsca Google w Android [duplikat]

To pytanie ma już tutaj odpowiedź:

Android: Tworzenie żądania HTTP 2 odpowiedzi

Jestem w obliczu wyjątku javax.net.ssl.SSLPeerUnverifiedException: Brak wyjątku certyfikatu peer podczas pracy z api miejsce google w emulatorze android. Poniżej jest mój adres URL:

https://maps.googleapis.com/maps/api/place/search/json?&location=28.632808,77.218276&radius=1000&sensor=false&key=AIzaSyC3y3fOMTqTkCjNNETQTCKustG7BRk_eVc

kiedy po prostu wklejam powyższy adres URL w pasku adresu przeglądarki, to daje to prosty ciąg Json. Myślę więc, że nie ma potrzeby uwierzytelniania certyfikatu.

Po tak wielu wyszukiwaniach i poświęceniu 2-3 dni użyłem klasy SSLSocketFacory pakietu org.apache.http.conn.ssl.SSLSocketFactory, aby uniknąć błędu certyfikatu równorzędnego.

poniżej jest mój kod:

public static HttpClient wrapClient(HttpClient base) {
        try {
            SSLContext ctx = SSLContext.getInstance("TLS");
            X509TrustManager tm = new X509TrustManager() {

                public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
                }

                public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
                }

                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };
            X509HostnameVerifier verifier = new X509HostnameVerifier() {

                public void verify(String string, SSLSocket ssls) throws IOException {
                }

                public void verify(String string, X509Certificate xc) throws SSLException {
                }

                public void verify(String string, String[] strings, String[] strings1) throws SSLException {
                }

                public boolean verify(String string, SSLSession ssls) {
                    return true;
                }
            };
            ctx.init(null, new TrustManager[]{tm}, null);
            SSLSocketFactory ssf = new SSLSocketFactory(ctx);
            ssf.setHostnameVerifier(verifier);
            ClientConnectionManager ccm = base.getConnectionManager();
            SchemeRegistry sr = ccm.getSchemeRegistry();
            sr.register(new Scheme("https", ssf, 443));
            return new DefaultHttpClient(ccm, base.getParams());
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

Korzystam z Androida api 16, a kiedy użyłem konstruktora SSLSocketFactory (SSLSocketContext), eclipse daje błąd kompliacji, więc przeszukałem wiele i pobrałem jar z SSLSocketFactory (SSLSocketContext), który jest plikiem „httpclient-4.1.1.jar”. Ustawiłem też kolejność tego słoika w ścieżce budowania projektu, ustawiłem najwyższy priorytet. Teraz otrzymuję następujące ostrzeżenie:

VFY:unable to resolve direct method 4253:Lorg/apache/http/conn/ssl/SSLSocketFactory.<init>

I po długim śladzie błędu spowodowanego przez

java.lang.NoSuchMethodError : org.apace.http.conn.ssl.SSLSocketFactory.<init>

Proszę, pomóż mi, nie wiem, gdzie się mylę.

questionAnswers(1)

yourAnswerToTheQuestion