在Android Studio中使用unirest的问题

我在我的logcat中遇到了一些错误,这些错误导致我的应用程序在尝试执行某些不正确的请求时崩溃。 我知道你必须生成一个包含所有依赖项的特殊unirest jar但是我遇到了maven的问题并且没有这样做,而是我已经在libs文件夹中单独包含了依赖项。 我已将问题缩小到下面的这个错误。

logcat的:

java.lang.VerifyError: com/mashape/unirest/http/options/Options at com.mashape.unirest.http.HttpClientHelper.prepareRequest(HttpClientHelper.java:154) at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:131) at com.mashape.unirest.request.BaseRequest.asJson(BaseRequest.java:68) 

我知道java.lang.verifyerror是由编译时与运行时给出的不同库引起的。 但我不知道如何解决这个问题。 请帮助,确保我需要的所有依赖项都在下面,因为我之前没有使用过unirest。

的build.gradle:

 dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile files('libs/unirest-java-1.3.20.jar') compile files('libs/rebound-0.3.6.jar') compile files('libs/commons-io-2.4.jar') compile files('libs/json-20140107.jar') compile files('libs/httpmime-4.3.5.jar') compile files('libs/httpclient-4.3.5.jar') compile files('libs/httpasyncclient-4.0.2.jar') compile files('libs/httpcore-4.3.2.jar') compile files('libs/commons-codec-1.6.jar') compile files('libs/commons-logging-1.1.3.jar') } 

我的libs文件夹是什么样的:

 commons-io-2.4.jar httpcore-4.3.2.jar httpclient-4.3.5.jar commons-logging-1.1.3.jar json-20140107.jar rebound-0.3.6.jar unirest-java-1.3.20.jar commons-codec-1.6.jar httpmime-4.3.5.jar httpasyncclient-4.0.2.jar 

还包括在build.gradle中,因为我在尝试构建gradle文件时遇到重复的文件错误:

 packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } 

我知道你问这个问题已经有一段时间了。 我认为Android会覆盖位于org.apache.http中的常见类。 你不能自己覆盖它们。 尝试将下载的软件包重新定位到另一个位置(例如surrogate.org.apache.http)以正确使用它们。

来自https://hc.apache.org/httpcomponents-client-4.3.x/android-port.html :

Google Android 1.0发布时带有Apache HttpClient的BETA前快照。 为了配合第一个Android版本,Apache HttpClient 4.0 API必须过早冻结,而许多接口和内部结构仍未完全解决。 随着Apache HttpClient 4.0的成熟,该项目期待Google将最新的代码改进整合到他们的代码树中。 不幸的是没有发生。 Android附带的Apache HttpClient版本实际上已成为一个分支。 最终谷歌决定停止进一步开发他们的分支,同时拒绝升级到Apache HttpClient的股票版本,理由是兼容性问题是这种决定的原因。 因此,那些希望在Android上继续使用Apache HttpClient API的Android开发人员无法利用更新的function,性能改进和错误修复。

如果继续阅读,您会发现以下内容:

某些实现类必须使用不同的名称进行复制(或着色),以避免与Android运行时中包含的相同类的旧版本冲突。 通过避免’org.apache.http。**。* HC4’类,可以提高与HttpClient的库存版本的兼容性。

使用

 dependencies { compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' } 

包括httpcomponents。

如果您不想手动重定位,则可能必须使用shadowJar插件重定位依赖项。

编辑:

我发现这个很棒的教程对我有用。 甚至以为我会建议使用AndroidAsync或Volley来建立与网络服务器的连接。