Android弃用apache模块(HttpClient,HttpResponse等)

Android已经弃用了API级别22以来的Apache模块,所以我的问题是,我该如何使用,例如Apache库中的HttpResponse ,而不是Android SDK? 问题是这两个软件包都是一样的。

但是,例如, HttpGet是可以的,因为它在Apache中被称为HttpGetHC4

HttpClient方法已被弃用。 您可以使用URLConnection,如下所示:

 private StringBuffer request(String urlString) { // TODO Auto-generated method stub StringBuffer chaine = new StringBuffer(""); try{ URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestProperty("User-Agent", ""); connection.setRequestMethod("POST"); connection.setDoInput(true); connection.connect(); InputStream inputStream = connection.getInputStream(); BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream)); String line = ""; while ((line = rd.readLine()) != null) { chaine.append(line); } } catch (IOException e) { // Writing exception to log e.printStackTrace(); } return chaine; } 

我希望这是帮助别人。

使用Apache的模块没什么不好的。 谷歌只是把它弄得一团糟,因为它们没有成功。 Google和Apache的整合是由Jesse Wilson监督的 – 他在Google工作,搞砸了一切,然后在广场上工作的时候创build了自己的图书馆(OkHttp)。 这是一个非常丑陋的故事。

我反对使用传统的JAR文件,因为它包含了一个旧版本的Apache库,没有改进和错误修正(这是一个非常古老的BETA前快照 )。 正如您在Apache组件的官方页面上看到的那样,有一个全新的4.4版本,与所有的Android版本兼容。 它只是不得不被重新包装在不同的命名空间下,以避免与旧版本的冲突。

你可以简单地添加从Maven的依赖(或从GitHub下载发布 ):

 dependencies { compile "cz.msebera.android:httpclient:4.4.1.2" } 

然后用cz.msebera.android.httpclientreplaceorg.apache.http ,这样你的导入将如下所示:

 import cz.msebera.android.httpclient.Header; import cz.msebera.android.httpclient.HttpHost; import cz.msebera.android.httpclient.HttpResponse; 

是的,你可以继续使用Apache库,而不浪费几个小时重写工作代码!

至于使用Apache组件和HttpURLConnection之间的区别,HttpURLConnection使用响应caching…就这些。 我不确定你是否真的想要,也可以自己实现。

顺便说一句,我尝试了像HttpURLConnection这样的替代品 – 这些甚至不接近Apache的威力和简单性。

在Android棉花糖(sdk 23)中,您可以添加:

useLibrary 'org.apache.http.legacy'

android {}部分中构build.gradle作为解决方法。 这似乎是一些谷歌自己的gms库所必需的!

如果我是你,我不使用HttpClient因为:

Apache HTTP客户端在Eclair和Froyo上有更less的错误。 这是这些版本的最佳select。

对于姜饼和更好,HttpURLConnection是最好的select。

参考

使用OKHttp或HttpUrlConnection 。 而且我也build议不要使用Apache库,因为它可能对Android没有效率。

我想你可以直接在你的项目中使用Apache库,而不是Android中的那些(你可以通过这种方式获得更多的控制权 – 如果需要的话,可以使用旧的SDK版本编译)。

在你的build.gradle中 ,添加这一行:

 dependencies { compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' } 

为了防止警告,请添加以下这些行:

 android { -- YOUR EXISTING LINES -- packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' } } 

将此添加到您的应用程序的依赖关系,然后它将正常工作:

 dependencies { ... compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' } 

如果还想使用httpclient库,则应该在build.gradle文件中添加一些描述。 而且似乎添加到build.gradle文件的内容是由目标Android项目构build的。

如果针对API22及更高版本,则应将以下行添加到build.gradle中

 dependencies { compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' } 

如果针对API23及更高版本,则应将以下行添加到build.gradle中

 dependencies { compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1' } 

这里是参考链接

使用openConnection()。

HttpClient文档build议。

参考这个答案。