Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android 6(棉花糖)中不推荐使用org.apache.http.entity.FileEntity_Java_Android_Httpurlconnection_Android 6.0 Marshmallow_Apache Commons Httpclient - Fatal编程技术网

Java Android 6(棉花糖)中不推荐使用org.apache.http.entity.FileEntity

Java Android 6(棉花糖)中不推荐使用org.apache.http.entity.FileEntity,java,android,httpurlconnection,android-6.0-marshmallow,apache-commons-httpclient,Java,Android,Httpurlconnection,Android 6.0 Marshmallow,Apache Commons Httpclient,我正在将一个应用程序升级到API23,其中org.apache.http已被弃用 我当前(已弃用)的代码如下所示: HttpClient httpClient = new DefaultHttpClient(); File file = new File(attr.Value); String url = server_url; HttpPost request = new HttpPost(url); FileEntity fileEntity = new FileEntity(file, "

我正在将一个应用程序升级到API23,其中
org.apache.http
已被弃用

我当前(已弃用)的代码如下所示:

HttpClient httpClient = new DefaultHttpClient();
File file = new File(attr.Value);
String url = server_url;
HttpPost request = new HttpPost(url);
FileEntity fileEntity = new FileEntity(file, "image/png");
request.setEntity(fileEntity);
HttpResponse response = httpClient.execute(request);
String output = getContent(response.getEntity().getContent());
我找到了一些关于如何使用
HttpURLConnection
实现这一点的建议,但它们都比当前的解决方案(不再使用)复杂得多。我说的是执行上述相同功能的许多代码行

例如:及

有人有好的解决方案吗

用于Android的Apache HttpClient 4.3端口旨在解决此问题 通过提供与谷歌兼容的官方版本来应对这种情况 安卓

考虑到Android API 23,谷歌的HttpClient分支已经 删除此项目已停止

希望在Android上继续使用Apache HttpClient的用户 建议考虑

针对Android API 22及更旧版本时,适用于Android的Apache HttpClient 4.3端口

dependencies {
    compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}
针对Android API 23及更新版本时,Marek Sebera维护了针对Android的Apache HttpClient软件包

dependencies {
    compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1'
}
摘自Apache官方网站:


注意:您不必使用
usebrary'org.apache.http.legacy'
语句,该语句是为未从Android提供的HttpClient类迁移的项目引入的。进一步说明。

如果您将
compileSdkVersion
更改为21,您的应用程序将干净地编译。话虽如此,谷歌退出内置的HttpClient实现是有原因的,因此您可能应该寻求其他库。那个 “其他图书馆”可以是:

  • 内置的经典Java
    HttpUrlConnection
    ,但正如您所发现的,它的API还有一些不足之处
  • Apache的独立打包
  • (我的建议)

特别是,OkHttp似乎为和提供了一个非常好的API,它应该与您的HttpClient代码的功能类似。

HttpClient的最佳替代品是使用Volley。它更易于使用,可以处理请求队列并缓存您的请求。它与API 4以下的几乎所有API级别完全兼容


有关如何操作,请参阅。

有关可能相关的OkHttp食谱,请参阅和。@commonware,谢谢链接。我一直在阅读OkHttp,并决定在我的应用程序中使用它。它为我解决了很多问题,而且非常容易使用。谢谢你的提示。写下这个作为答案,我会给你打分。如果你想使用截击,你可以参考另一个选项。谢谢你,我可以看到,当存在好的替代方案时,没有真正的理由花太多时间直接使用HttpURLConnection。我决定使用OkHttp库(它本身使用HttpURLConnection,但肯定比我更有效)。如果它对Twitter和FB来说足够好,那么对我来说可能就足够好了。或者你可以将它添加到你的
build.gradle
android{usebrary'org.apache.http.legacy'}
。请参阅。@Commonware:我们可以使用Volley替换HttpClient吗?@akshayrajkore:可以,Volley是另一种选择。与我列出的那些相比,我不太喜欢它,因为谷歌没有那么好地支持它(例如,没有真正的JAR或AAR)。@commonware:从你的书和其他来源我能理解的是,volley也使用不推荐的apache客户端库。知道这一点,我们为什么还要使用它?@akshayrajkore:“其他消息来源是,volley也使用了不推荐的apache客户端库”——仅在Android 2.2及更高版本上使用。在任何更新的版本上,它都使用
HttpUrlConnection
@akshayrajkore:reformation并不等同于上面讨论的任何内容,因为reformation只用于调用Web服务。在封面下,改型将使用OkHttp。