В Android, почему все классы org.apache.http. * Устарели в API 22 (и что я должен использовать в качестве замены)?

Я использую ThreadSafeClientConnManager в своем приложении и группу других классов, таких как HttpStatus, SSLSocketFactory, PlainSocketFactory, SchemeRegistry и т.д. Но с API 22 все они отмечены как устаревшие, и я не вижу никаких четкое указание на то, что их заменило. В документации jas говорится: "Пожалуйста, используйте openConnection(). Посетите эту веб-страницу для получения более подробной информации", и это не дает понять, что делать. openConnection() просто указывает на класс URL, а ссылка на веб-страницу - с 2011 года, в которой говорится о различиях между классами Apache и HttpUtrlConnection. Итак, значит ли это, что мы теперь должны быть классом useign HttpUrlConnection? И если это так, я подумал, что он не был потокобезопасным (вот почему я использовал ThreadSafeClientConnManager).

Может кто-то прояснит это для меня?

Ответ 1

Я спросил что-то вроде that около полугода назад. Как оказалось, мы должны использовать только openConnection() вместо старых.

Я думаю, что немного изменить код, поскольку Lollipop находится на нескольких смартфонах, но вы должны изменить его, чтобы вы могли сократить время. Я получил неплохую идею отсюда, как подключиться Используя java.net.URLConnection для запуска и обработки HTTP-запросов?, а также попытайтесь найти "пример httpurlconnection"

Также о безопасности потоков this, надеюсь, что это поможет

(Я пытался опубликовать его в качестве комментария, но у меня недостаточно репутации)

Ответ 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();
    }

источник