在 Android SDK 23 中使用 Apache HttpClient。NoSuchMethod
Posted
技术标签:
【中文标题】在 Android SDK 23 中使用 Apache HttpClient。NoSuchMethod【英文标题】:Using Apache HttpClient with Android SDK 23. NoSuchMethod 【发布时间】:2015-08-31 13:52:24 【问题描述】:已经为此在谷歌创建了bugticket。 可能有人有什么想法吗?
我想在 Apache 库中使用普通的 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 字段声明。
【问题讨论】:
把你的 gradle.app 贴在你放漫画的地方 开始复制,请搜索android M httpclient legacy @Revanth Rev 和 cV2,请查看以下链接,您的问题的解决方案。 ***.com/questions/32340629/… 【参考方案1】:自 API 级别 22 起,以下类已被删除
org.apache.http.conn.ssl.AllowAllHostnameVerifier
可以在官方api changes看到被移除的类
您可以改用HttpURLConnection 类。
根据official guide
此 API 更高效,因为它通过透明压缩和响应缓存减少了网络使用,并将功耗降至最低
** 编辑 **
根据 CommonsWare 下面的评论,还有其他 3rd 方选项,包括 OkHttp 或 Apache's separate HttpClient library for Android
【讨论】:
“你必须改用 HttpURLConnection 类”——不。虽然 HttpClient 本身已被删除,并且HttpURLConnection
是一个选项,但还有其他选项,例如 OkHttp 或 Apache's separate HttpClient library for Android。
@CommonsWare 抱歉英语不是我的母语,我编辑了我的声明。谢谢。
这个问题不相关,正如我所描述的......谷歌错误报告被评为“中等 && 缺陷......”所以......存在描述的问题......
也可以添加useLibrary 'org.apache.http.legacy' 看这个帖子 --> ***.com/questions/32153318/…
另一个强大的库是Volley,它在许多情况下是一个更容易和更快使用的库。它确实支持 HTTPS (SSL)【参考方案2】:
是库版本的问题,试试这个版本
implementation 'org.apache.httpcomponents:httpclient:4.5.3'
api 'org.apache.httpcomponents:httpcore:4.4.6'
api 'org.apache.httpcomponents:httpmime:4.3.6'
【讨论】:
以上是关于在 Android SDK 23 中使用 Apache HttpClient。NoSuchMethod的主要内容,如果未能解决你的问题,请参考以下文章
在 Android SDK 23 中使用 Apache HttpClient。NoSuchMethod
解决在sdk manager中更新文件后出现This Android SDK requires Android Developer Toolkit version 23.1的错误
Gradle 构建问题:在最新的 Android SDK23 上升级 Quickblox 和 httpclient