当前位置: 首页 > 知识库问答 >
问题:

Apache http客户端Android库的Android问题

岳奇逸
2023-03-14

这是我正在使用的库:https://github.com/clickntap/vimeo

我正在尝试使用图书馆的一个Android应用程序。我的测试设备是Kitkat(4.4.4)。

compileSdkVersion 25
buildToolsVersion "25.0.3"
useLibrary  'org.apache.http.legacy'

defaultConfig {
    applicationId "my.app.package"
    minSdkVersion 16
    targetSdkVersion 25
    versionCode 1
    versionName "1.0.0-alpha"
}

下面是我添加库的方法:

compile 'com.clickntap:vimeo:1.10'

但在vimeo.addVideo()上收到以下错误:

java.lang.NoClassDefFoundError: org.apache.http.impl.client.HttpClientBuilder

和警告:

WARNING: Dependency org.apache.httpcomponents:httpclient:4.3.6 is ignored for debug as it may be conflicting with the internal version provided by Android.
WARNING: Dependency org.json:json:20140107 is ignored for debug as it may be conflicting with the internal version provided by Android.
compile 'org.apache.httpcomponents:httpclient-android:4.3.5.1'
compile('com.clickntap:vimeo:1.10') {
    exclude group: 'org.apache.httpcomponents'
    exclude group: 'org.json'
}
java.lang.NoSuchMethodError: org.apache.http.entity.FileEntity.<init>
Caused by: java.lang.NoClassDefFoundError: org.apache.http.impl.client.HttpClientBuilder
                at com.clickntap.vimeo.Vimeo.apiRequest(Vimeo.java:218)
                at com.clickntap.vimeo.Vimeo.beginUploadVideo(Vimeo.java:122)
                at com.clickntap.vimeo.Vimeo.addVideo(Vimeo.java:138)
                at my.app.package.VimeoActivity$6.subscribe(VimeoActivity.java:163) // my activity
                at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)
                at io.reactivex.Single.subscribe(Single.java:2702)
                at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
                at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:451)
                at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)
                at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) 
                at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) 
                at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) 
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                at java.lang.Thread.run(Thread.java:841) 

下面是第二个场景,其中包含HttpClient-Android:

Caused by: java.lang.NoSuchMethodError: org.apache.http.entity.FileEntity.<init>
                at com.clickntap.vimeo.Vimeo.apiRequest(Vimeo.java:247)
                at com.clickntap.vimeo.Vimeo.uploadVideo(Vimeo.java:126)
                at com.clickntap.vimeo.Vimeo.addVideo(Vimeo.java:140)
                at my.app.package.VimeoActivity$6.subscribe(VimeoActivity.java:163) // my activity
                at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)
                at io.reactivex.Single.subscribe(Single.java:2702)
                at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
                at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:451)
                at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)
                at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) 
                at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) 
                at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) 
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                at java.lang.Thread.run(Thread.java:841) 

共有1个答案

乐城
2023-03-14

Android版本<6嵌入了Apache HTTP Client 4.0.beta快照的分叉(https://hc.Apache.org/httpcomponents-client-4.3.x/android-port.html)。

第一个场景失败,因为httpclientbuilder是在httpclient:4.3上引入的。

第二种情况失败,因为您同时使用了加载旧版httpclient库的useLibrary'org.apache.http.legacy'compile'org.apache.httpComponents:httpClient-android:4.3.5.1'。Vimeo客户端使用了遗留库中不存在的FileEntity构造函数,该构造函数存在于类路径中,并且优先于httpclient-android版本的FileEntity类。

我建议像在第二个场景中那样使用依赖项,但删除useLibrary'org.apache.http.legace'

如果您使用的是4.3.5.1之前或之后引入的API,并且假设httpclient-android库的公共API与相同版本的HttpComponents:HttpClient库相同,则该解决方案将适用于对HttpComponents:HttpClient的任何依赖关系。

更新

在上面的示例中,Vimeo库直接使用FileEntity构造函数,该构造函数将库与特定类耦合,而如果使用EntityBuilder,则可以将其解耦。所以我能看到的唯一方法,就是修改库源代码,使其与httpclient-android库和Android兼容。

 类似资料:
  • 我读了很多文章来寻找java应用程序的最佳Rest客户机,最后我发现将Jersey与ApacheHTTP客户机4.5结合使用非常好,但在很多文章中,我发现现在改型是最好的(我没有提到Volley,因为在我的例子中,我不需要API支持缓存)。 对于java客户机应用程序,改型是否更好。还是对Android来说更好?为什么我以前没有找到这个比较。。它们无法比较? 我可以比较一下它们的性能、连接池、它们

  • 我用Jhipster生成器生成了一个项目,并尝试使用android客户端连接到服务器。我的登录部分有问题,我不知道如何生成/获取登录所需的csrf令牌。我看到web客户端将此令牌作为请求的一部分发送。 当我试图从邮递员和Android访问路线我收到这个错误: 谢谢

  • 这是 OSCHINA 官方开发的 Android 客户端软件,采用原生 API 开发,非 HTML 模式。             采用 GPL 授权协议,鼓励你在这基础上进行修改和完善,并与大家分享你的版本。 下载官方版本:http://www.oschina.net/app

  • 问题内容: 我是android开发的新手,并希望使用Thrift客户端创建一个应用,该客户端在我的网络上使用Thrift服务器。我已经获得了Thrift定义文件和Thrift编译器生成的Java代码。 我该如何开始?如何将旧版库添加到我的项目中?我需要自己编译吗?如果是,我应该如何做到这一点以使其与Android兼容? 我可以直接使用类似于此功能的自动生成的功能吗 对我的服务进行异步调用,以便我遵

  • 我是android开发新手,希望创建一个应用程序,其中包含一个thrift客户端,该客户端正在我的网络上使用thrift服务器。我已经得到了thrift定义文件和thrift编译器生成的java代码。 > 我可以直接使用类似于此的自动生成函数吗 对我的服务进行异步调用以便我遵循android最佳实践?或者使用这个功能会以任何方式阻止我的应用程序,或者在android上还有其他方式比这个更好吗? 我

  • 此软件是 Git@OSC 的 Android 客户端,同时也有 iPhone 版本的 Git@OSC 客户端。 总会有人怀疑 Git 手机客户端到底有什么用,会有谁在手机上玩 Git。这个怀疑很有道理,因此 Git@OSC 的手机客户端主要考虑的是移动的使用场景,你可以通过手机来浏览项目、查看源码、发布 Issue、回复 Issue、关注项目、下载文件,项目收藏,Star 功能和摇一摇等功能,但你