【发布时间】:2016-04-28 08:06:29
【问题描述】:
在我的项目中,我正在使用这些库:
compile 'org.apache.httpcomponents:httpclient:4.5.2'
compile 'org.apache.httpcomponents:httpcore:4.4.4'
一切正常,直到我更新了 API 23 的 Android 工具。然后当我尝试执行 HttpPost 时,出现以下异常:
java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:966)
at org.apache.http.impl.client.HttpClients.createDefault(HttpClients.java:58)
这是发生这种情况的库代码:
public class SSLConnectionSocketFactory implements LayeredConnectionSocketFactory {
public static final String TLS = "TLS";
public static final String SSL = "SSL";
public static final String SSLV2 = "SSLv2";
@Deprecated
public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER
= AllowAllHostnameVerifier.INSTANCE;
查看外部库时,可以看到android.jar下的AllowAllHostnameVerifier类:
当使用这个问题的答案中的代码时:java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE from Mashape Unirest in Java application
我得到这个输出:
jar:file:/E:/Program%20Files/Eclipse%20Android%20SDK/adt-bundle-windows-x86_64-20140702/sdk/platforms/android-23/android.jar!/org/apache/http/ conn/ssl/AllowAllHostnameVerifier.class
所以我可以看到构建是从 SDK 而不是从 Apache 库中获取此类。
所以问题是,我如何修复我的类路径或其他必要的配置,以指导构建像以前一样使用来自 Apache 而不是来自 SDK 的这些类?
提前致谢!
【问题讨论】:
标签: android apache android-studio android-sdk-tools