使用Apache HttpClient和Android SDK 23. NoSuchMethod

时间:2015-08-31 13:52:24

标签: android apache api sdk httpclient

已经在Google上为此创建了bugticket。 可能有人有任何想法吗?

嘿伙计们,我想在Apache Library中使用普通的HTTPClient(CloseableHttpClient),

mCloseableHttpClient = HttpClientBuilder.create()
                .setDefaultRequestConfig(defaultRequestConfig)
                .setUserAgent(userAgent)
                .build();

并且应用程序总是直接崩溃:

java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; in class Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; or its superclasses (declaration of 'org.apache.http.conn.ssl.AllowAllHostnameVerifier' appears in /system/framework/ext.jar)
            at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
            at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:912)

API级别22 <(相同,API级别 23 )。

问题是:Android SDK 中的类没有声明 INSTANCE 字段。

2 个答案:

答案 0 :(得分:1)

自API级别22以来,已删除以下类

org.apache.http.conn.ssl.AllowAllHostnameVerifier

您可以在官方api changes

中查看已删除的课程

您可以改用HttpURLConnection课程。

根据official guide

  

此API更有效,因为它通过透明压缩和响应缓存减少了网络使用,并最大限度地降低了功耗

** 编辑 **

根据下面CommonsWare的评论,还有其他第三方选项,包括OkHttpApache's separate HttpClient library for Android

答案 1 :(得分:0)

是库版本的问题,请尝试使用此版本

implementation 'org.apache.httpcomponents:httpclient:4.5.3'
    api 'org.apache.httpcomponents:httpcore:4.4.6'
    api 'org.apache.httpcomponents:httpmime:4.3.6'