org.apache.http.entity.FileEntity在Android 6(棉花糖)

我将应用程序升级到API 23,其中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()); 

我已经find了一些如何使用HttpURLConnection完成这些build议的build议,但是它们HttpURLConnection当前的解决scheme(不能再使用)要复杂得多。 我正在谈论执行与上面相同的function的许多代码行。

例子是: 这个页面和这个页面

有没有人有一个很好的固体更短的解决scheme呢?

如果你把你的compileSdkVersion 21,你的应用程序将会干净的编译。 也就是说,谷歌正在从内置的HttpClient实现中退出是有原因的,所以你可能应该去追求其他一些库。 “其他一些图书馆”可能是:

  • 内置的经典Java HttpUrlConnection ,虽然你已经发现,它的API留下了一些需要的东西
  • Apache的Android独立包装HttpClient
  • OkHttp (我的build议)
  • AndroidAsync

特别是,OkHttp似乎有一个相当不错的API用于发布文件并发布多部分表单 ,这应该与您的HttpClient代码所做的相似。

Android的Apache HttpClient 4.3端口旨在通过提供与Google Android兼容的正式版本来弥补这一状况。

鉴于从Android API 23谷歌的HttpClient叉已被删除,该项目已经停产。

build议那些想要在Android上继续使用Apache HttpClient的用户考虑

针对Android API 22及更早版本的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官方网站 : 适用于Android的Apache HttpClient

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

最好的替代HTTPClient使用Volley。 使用起来更容易,处理请求队列并caching你的请求。 它完全兼容API 4以下的所有API级别。

请参阅Android文档了解如何操作。