在Android中,为什么在API 22中不推荐使用所有org.apache.http。*类(我应该使用什么作为替换)?

时间:2015-04-01 13:20:55

标签: android http httpurlconnection

我在我的应用程序中使用ThreadSafeClientConnManager,以及一些其他类,如HttpStatus,SSLSocketFactory,PlainSocketFactory,SchemeRegistry等。但是,从API 22开始,所有这些都被标记为已弃用,而我不是看到有什么替代它们的明确迹象。文档jas说“请使用openConnection()代替。请访问this webpage以获取更多详细信息”,这并不能说清楚该怎么做。 openConnection()只指向URL类,而网页链接来自2011年,它讨论了Apache类和HttpUtrlConnection之间的差异。那么,这是否意味着从现在起我们应该使用useign HttpUrlConnection类?如果是这种情况,我认为它不是线程安全的(这就是为什么我使用ThreadSafeClientConnManager)。

有人可以帮我澄清一下吗?

2 个答案:

答案 0 :(得分:5)

半个月前我问that之类的东西。事实证明,我们只能使用openConnection()而不是旧的。

我认为改变你的代码还为时过早,因为Lollipop上有少量的智能手机,但你应该改变它以便提前减少。我从这里得到一个非常好的主意如何连接Using java.net.URLConnection to fire and handle HTTP requests?并尝试搜索" httpurlconnection示例"

关于线程安全性this,希望有所帮助

(我试图将其发布为评论,但我没有足够的声誉)

答案 1 :(得分:2)

将此HttpUrlConnection用作备用

public String  performPostCall(String requestURL,
            HashMap<String, String> postDataParams) {

        URL url;
        String response = "";
        try {
            url = new URL(requestURL);

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(15000);
            conn.setConnectTimeout(15000);
            conn.setRequestMethod("POST");
            conn.setDoInput(true);
            conn.setDoOutput(true);


            OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
            writer.write(getPostData(postDataParams));

            writer.flush();
            writer.close();
            os.close();
            int responseCode=conn.getResponseCode();

            if (responseCode == HttpsURLConnection.HTTP_OK) {
                String line;
                BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                while ((line=br.readLine()) != null) {
                    response+=line;
                }
            }
            else {
                response="";

                throw new HttpException(responseCode+"");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return response;
    }

...

  private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException{
        StringBuilder result = new StringBuilder();
        boolean first = true;
        for(Map.Entry<String, String> entry : params.entrySet()){
            if (first)
                first = false;
            else
                result.append("&");

            result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
        }

        return result.toString();
    }

source