HttpEntity现在在Android上被弃用了,还有什么选择?

jos*_*ick 45 android httpurlconnection apache-httpclient-4.x

随着Android 5.1的发布,看起来所有Apache http的东西都被弃用了.看文档是没用的; 他们都说

This class was deprecated in API level 22. Please use openConnection() instead. Please visit this webpage for further details.

这是第一次阅读它时没关系,但是当每个被弃用的类都说明了这一点时,它没那么有用.

总之,什么是类的替代喜欢HttpEntity,特别是StringEntityMultipartEntity我替换BasicNameValuePair了我自己的Android Pair<T, S>类实现,它看起来URLEncoder.encode是一个很好的替代品URLEncodedUtils,但我不知道该怎么做HttpEntity.

编辑

我决定重新编写网络内容.要尝试使用Retrofit和OkHttp

编辑

认真看看将你的通话和东西转换为Retrofit.很漂亮.我很高兴我做到了.有一些障碍,但它很酷.

C0D*_*OU5 21

您始终可以导入最后一个Apache Http客户端并使用它.此外,您可能需要查看一个像VolleyRetrofit这样的网络库,以防您可以使用它.如果启动新项目,建议使用网络库,因为不需要重新发明轮子.但如果你坚持使用HttpClient,那么请继续阅读.

编辑:关于Apache HttpClient的最新消息(截至2015年7月11日)

谷歌Android 1.0发布了Apache HttpClient的BETA前快照.为了配合第一个Android版本,Apache HttpClient 4.0 API必须过早冻结,而许多接口和内部结构仍未完全解决.随着Apache HttpClient 4.0的日趋成熟,该项目期待Google将最新的代码改进整合到他们的代码树中.不幸的是没有发生.Android附带的Apache HttpClient版本实际上已成为一个分支.最终谷歌决定停止进一步开发他们的分支,同时拒绝升级到Apache HttpClient的股票版本,理由是兼容性问题是这种决定的原因.因此,那些希望在Android上继续使用Apache HttpClient API的Android开发人员无法利用更新的功能,性能改进和错误修复.用于Android的Apache HttpClient 4.3端口旨在通过提供与Google Android兼容的官方版本来解决这种情况.鉴于从Android API 23开始,谷歌的HttpClient分支已被删除,该项目已经停止.

但是,有一个Apache HttpClient v4.3的官方Android端口

Android API 22及更早版本应使用Apache HttpClient v4.3

dependencies {
         compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' 
}
Run Code Online (Sandbox Code Playgroud)

Android API 23及更新版本应使用由Marek Sebera维护的适用于Android的Apache HttpClient软件包

dependencies {
     compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1' 
}
Run Code Online (Sandbox Code Playgroud)

来自Apache.org的信息


fat*_*ddy 12

HttpClient的文档指出你在正确的方向:

org.apache.http.client.HttpClient:

此接口在API级别22中已弃用.请改用openConnection().请访问此网页了解更多详情.

意味着你应该切换到java.net.URL.openConnection().

这是你如何做到的:

java.net.URL url = new java.net.URL("http://some-server");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");

// read the response
System.out.println("Response Code: " + conn.getResponseCode());
InputStream in = new BufferedInputStream(conn.getInputStream());
String response = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
System.out.println(response);
Run Code Online (Sandbox Code Playgroud)

  • 如果您阅读此URL.http://android-developers.blogspot.in/2011/09/androids-http-clients.html**哪个客户端最好?****Apache HTTP客户端在Eclair和Froyo上的错误较少.它是这些版本的最佳选择.****对于Gingerbread而言,更好的是,HttpURLConnection是最佳选择.**它简单的API和小巧的尺寸使它非常适合Android.透明压缩和响应缓存可减少网络使用,提高速度并节省电池电量.新的应用程序应该使用HttpURLConnection; 这是我们将继续投入精力的地方. (2认同)