我正面临一个javax.net.ssl.SSLPeerUnverifiedException:在Android模拟器中使用google place api时没有对等证书异常。我的网址是:
https://maps.googleapis.com/maps/api/place/search/json?&location=28.632808,77.218276&radius=1000&sensor=false&key=AIzaSyC3y3fOMTqTkCjNNETQTCKustG7BRk_eVc
当我简单地将上面的url粘贴到浏览器地址栏中时,它简单地给出了Json字符串。所以,我认为不需要任何证书认证。
经过这么多的谷歌搜索和投入2-3天后,我使用了org.apache.http.conn.ssl.SSLSocketFactory包的SSLSocketFacory类来避免对等证书错误。
下面是我的代码:
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;
}
}
我正在使用android api 16,当我使用SSLSocketFactory(SSLSocketContext)构造函数时,eclipse会给出compliation错误,所以我搜索了很多并下载了jar SSLSocketFactory(SSLSocketContext),它是“httpclient-4.1.1.jar”文件。我还在项目构建路径中设置了该jar的顺序,设置了最高优先级。现在我收到以下警告:
VFY:unable to resolve direct method 4253:Lorg/apache/http/conn/ssl/SSLSocketFactory.<init>
由
引起的长时间错误跟踪java.lang.NoSuchMethodError : org.apace.http.conn.ssl.SSLSocketFactory.<init>
请帮助我,我不知道,我哪里错了。
答案 0 :(得分:2)
我也有这个问题,并在互联网上搜索了很多东西,但我通过一个简单的步骤解决了
我不知道具体原因,但我通过重新启动模拟器或创建新模拟器来解决它,并在新模拟器中运行项目
我不会说这是确切的答案,但在使用复杂代码修改编码之前尝试