【问题标题】:Volley 1.1 dependency on org.apache.httpVolley 1.1 对 org.apache.http 的依赖
【发布时间】:2018-11-15 06:16:36
【问题描述】:

据我了解,https://github.com/google/volley/wiki/Migrating-from-Apache-HTTP volley 1.1 放弃了对 org.apache.http 的强制依赖。和

“大多数应用程序使用 HurlStack 或 Volley#newRequestQueue minSdkVersion 设置为 9 或更高应该不需要采取任何行动 除了从 build.gradle 文件中删除 useLibrary 'org.apache.http.legacy' 声明(如果存在)之外。”

我不在任何地方使用 org.apache.http,但是当我尝试在单元测试中执行 Volley.newRequestQueue(context.getApplicationContext()) 或新的 HurlStack() 时,我得到:

java.lang.NoClassDefFoundError: org/apache/http/StatusLine

在运行时。检查 HurlStack 类,我看到它继承自 BaseHttpStack 显然仍然依赖于 org.apache.http

import org.apache.http.ProtocolVersion;
import org.apache.http.StatusLine;
import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.message.BasicStatusLine;

所以,我没明白,如果使用 api 级别 > 23 的 volley,我应该包含 org.apache.http 吗?

解决方法:

如果我将它包含在 build.gradle 中,测试运行良好:

testImplementation "org.apache.httpcomponents:httpclient:4.5.5"

注意:

这不是关于 NoClassDefFoundError 的一般问题,它专门针对 Volley 在说明(阅读帖子上的链接)说它不应该抛出这个异常时抛出这个异常。

【问题讨论】:

  • 你用什么进行单元测试?莫基托?机电? Junit4还是5?测试框架可能由于某种原因默认为较低的 minSDK 版本,从而迫使需要 Apache HTTP。如果是这种情况,请将清单放在您的测试文件夹中,将 minsdk 设置得更高。
  • 注意;您不能在 Android 上使用非仪器化单元测试中的 volley - 请参阅 github.com/google/volley/issues/346

标签: android android-volley


【解决方案1】:

在 Android Pi(9) 设备的 Application 标签中的 AndroidManifest 文件中使用以下行

  <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />

【讨论】:

  • 你应该解释为什么这是解决方案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 2017-05-02
  • 2017-08-16
  • 1970-01-01
  • 2015-04-29
  • 2023-03-06
  • 2019-03-06
相关资源
最近更新 更多