【问题标题】:Getting NoSuchFieldError INSTANCE org/apache/http/message/BasicHeaderValueParser获取 NoSuchFieldError 实例 org/apache/http/message/BasicHeaderValueParser
【发布时间】:2015-02-06 14:33:21
【问题描述】:

我正在开发一个 Android 应用。我正在使用 httpcore 4.3.3。当我尝试使用 ContentType.parse(string)

时,我得到了这个
java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/message/BasicHeaderValueParser; in class Lorg/apache/http/message/BasicHeaderValueParser; or its superclasses (declaration of 'org.apache.http.message.BasicHeaderValueParser' appears in /system/framework/ext.jar)

我在 Google 上进行了一些搜索,并且了解我收到错误的原因,但我不确定如何解决它。根据我的阅读,似乎 ContentType 试图利用 Android 附带的 BasicHeaderValueParser 并且该类还没有 INSTANCE 字段。请问有什么帮助吗?

这些是相关的导入:

compile('org.apache.httpcomponents:httpmime:4.3.6') {
    exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpcore:4.3.3'

【问题讨论】:

  • 你在使用 Proguard 吗?
  • 我不这么认为。我最近升级到 android studio 1.0,这让你使用 minifyEnabled 而不是 runProguard,我想我把它们设置为 false。我可以尝试将它们设置为 true,但还有其他方法可以解决这个问题吗? --> 好像没有修复
  • 使用 jarjar 重新打包 apache http 库或使用旧的 httpmime 库(检查哪个版本与您项目的 minsdk 兼容)

标签: android apache-httpclient-4.x androidhttpclient


【解决方案1】:

很遗憾,HttpCore 的库存版本不能在 Android 中使用。请使用Apache HttpClient Android Port,其中还包括必要的 HttpCore 类

compile('org.apache.httpcomponents:httpmime:4.3.6') {
    exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'

【讨论】:

  • 我在 httpmim:4.5 上尝试了这种方法,但它不起作用,但在 4.3.6 中 (stackoverflow.com/a/29473284/1423773) 也不要忘记这一点。
  • 所有其他库都需要什么?因为我收到错误 - Error:(76, 64) error: cannot access HttpEntity class file for org.apache.http.HttpEntity not found 我使用了与您的回复中提到的相同的库。此外,我被重定向自 - [link]stackoverflow.com/questions/32796770/…
  • 好的,我找到了解决方案,在这里查看 - stackoverflow.com/questions/32796770/…
  • @oleg link 如何在 Eclipse 上添加它?另外,当我尝试获取 jar - 此处为 Android 的 HttpClient link 链接已失效,我该怎么办
  • 为我工作谢谢。
【解决方案2】:

简单的解决方案是使用:

https://code.google.com/p/httpclientandroidlib/

这是用于 android 的 Appache HttpClient 端口以不同的包名称包装,因此不会干扰 Android 中的现有版本。 在 Android 项目中导入 jar,而不是“org.apache.http”,使用“ch.boye.httpclientandroidlib”。

【讨论】:

    【解决方案3】:

    下载最新的 Apache Httpclient Jar 文件和折射路径名。这对我有用。

    【讨论】:

      【解决方案4】:

      看起来您为 httpmime 和 httpclient-android 使用了不兼容的 jar。尝试使用 httpmime 4.3.6 版本

      【讨论】:

        【解决方案5】:

        只需在lib文件夹中添加4.3.6版本文件的httpmime_4.3.6.jar并添加

        gradle(应用级别)中的实现文件('lib/httpmime-4.3.6.jar')

        【讨论】:

          【解决方案6】:

          注意:如果您同时使用 apache httpmime 和改造 使用 apache httpmime 旧版本。

          (例如:在我的情况下,我使用它在服务器上上传图像并 获取内容长度/图像大小)

          这是一个旧版本(不是那么旧)或上一个版本,您应该为两者实现相同的旧版本。

          实现 'com.squareup.retrofit2:retrofit:2.0.2' 实现 'org.apache.httpcomponents:httpmime:4.3.6'

          这是他的新版本改造,你应该使用旧版本的apache httpmime。

          实现 'com.squareup.retrofit2:retrofit:2.3.0' 实现 'org.apache.httpcomponents:httpmime:4.3.6'

          非常感谢,如果你喜欢我的解决方案,请为我投票。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-02-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-05
            • 1970-01-01
            • 1970-01-01
            • 2014-10-06
            相关资源
            最近更新 更多