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

时间:2015-03-19 16:37:17

标签: 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。很漂亮。我很高兴我做到了。有一些障碍,但它很酷。

3 个答案:

答案 0 :(得分:20)

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

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

  

谷歌Android 1.0发布时带有Apache的BETA前快照   HttpClient的。恰逢第一个Android发布的Apache   HttpClient 4.0 API必须过早冻结,而许多   接口和内部结构仍未完全解决。如   Apache HttpClient 4.0正在成熟,该项目期待着谷歌   将最新的代码改进合并到他们的代码树中。   不幸的是没有发生。发布了Apache HttpClient的版本   与Android有效地成为一个分叉。最终谷歌决定   在拒绝的同时停止进一步开发他们的叉子   升级到Apache HttpClient的股票版本引用兼容性   关注是这种决定的原因。结果那些Android   希望继续使用Apache HttpClient API的开发人员   Android无法利用更新的功能,性能   改进和错误修复。 Android的Apache HttpClient 4.3端口是   旨在通过提供正式版本来纠正这种情况   与谷歌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' 
}

Android API 23及更新应使用适用于Android的Apache HttpClient软件包maintained by Marek Sebera

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

来自Apache.org

的信息

答案 1 :(得分: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);

答案 2 :(得分:2)

通过httpurlconnection

调用webservice httpclient替换

我的代码

public static String getDataFromUrl(String url) {
        String result = null;
//        System.out.println("URL comes in jsonparser class is:  " + url);
        try {
            URL myurl=new URL(url);
            HttpURLConnection urlConnection = (HttpURLConnection) myurl
                    .openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoInput(true);
            urlConnection.connect();
            InputStream is=urlConnection.getInputStream();
            if (is != null) {
                StringBuilder sb = new StringBuilder();
                String line;
                try {
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(is));
                    while ((line = reader.readLine()) != null) {
                        sb.append(line);
                    }
                    reader.close();
                } finally {
                  is.close();
                }
                result = sb.toString();
            }
        }catch (Exception e){
            result=null;
        }
        return result;
    }