问题
Already created a bugticket at google for this. Possibly anyone has any ideas?
Hey guys, I wanted to use a normal HTTPClient
(CloseableHttpClient) within Apache Library,
mCloseableHttpClient = HttpClientBuilder.create()
.setDefaultRequestConfig(defaultRequestConfig)
.setUserAgent(userAgent)
.build();
and the Application always directly crashes with:
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)
starting at API Level 22 (same for API Level 23).
The Problem is: The class within the Android SDK doesnt have INSTANCE field declared.
回答1:
The following class has been removed as of API level 22
org.apache.http.conn.ssl.AllowAllHostnameVerifier
You can see the removed classes in the official api changes
You can use HttpURLConnection class instead.
According to official guide
This API is more efficient because it reduces network use through transparent compression and response caching, and minimizes power consumption
** EDIT **
According to CommonsWare's comment below, there are also other 3rd party options including OkHttp or Apache's separate HttpClient library for Android
回答2:
Is a problem of a library version try with this versions
implementation 'org.apache.httpcomponents:httpclient:4.5.3'
api 'org.apache.httpcomponents:httpcore:4.4.6'
api 'org.apache.httpcomponents:httpmime:4.3.6'
来源:https://stackoverflow.com/questions/32312932/using-apache-httpclient-with-android-sdk-23-nosuchmethod