这是我正在使用的库: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)
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 功能和摇一摇等功能,但你