В 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();
}
источник