在 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

使用 Android SDK 23 请求相机权限

解决在sdk manager中更新文件后出现This Android SDK requires Android Developer Toolkit version 23.1的错误

Gradle 构建问题:在最新的 Android SDK23 上升级 Quickblox 和 httpclient

你还没有接受以下sdk组件的许可协议[android sdk build-tools 23.0.1]

Android sdk23 找地方更新和请求权限