据我所知https://github.com/google/volley/wiki/Migrating-from-Apache-HTTP 排球1.1删除了对org.apache.http 的强制依赖。和
"大多数使用HurlStack或Volley#newRequestQueue的应用程序 minSdkVersion设置为9或更高不应该采取任何行动 除了删除useLibrary' org.apache.http.legacy' build.gradle文件中的声明(如果存在)。"
我没有在任何地方使用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级别的凌空>我应该包括org.apache.http。 23或不?
解决方法:
如果我将它包含在build.gradle中,测试运行正常:
testImplementation "org.apache.httpcomponents:httpclient:4.5.5"
注意:
这不是关于NoClassDefFoundError的一般性问题,它特别针对Volley抛出此异常,当指令(阅读帖子上的链接)说它不应该。
答案 0 :(得分:3)
在Android Pi(9)设备的Application标签的AndroidManifest文件中使用以下行
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />