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文档了解如何操作。