HttpEntity устарела на Android сейчас, какова альтернатива?
С выпуском 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
конкретно StringEntity
, а также MultipartEntity
? Я подставил BasicNameValuePair
для моей собственной реализации Android Pair<T, S>
класс, и это выглядит как URLEncoder.encode
является хорошей заменой URLEncodedUtils
, но я не уверен, что делать с HttpEntity
,
РЕДАКТИРОВАТЬ
Я решил просто переписать сетевые материалы. Попробую использовать Retrofit и OkHttp
РЕДАКТИРОВАТЬ
Серьезно взгляните на переключение ваших звонков и прочее на Retrofit. Довольно изящно. Я рад, что сделал. Было несколько препятствий, но это круто.
3 ответа
Вы всегда можете импортировать последний клиент Apache Http и использовать его. Кроме того, вы можете захотеть взглянуть на сетевую библиотеку, такую как Volley или Retrofit, на тот случай, если вы сможете использовать ее вместо этого. При запуске нового проекта рекомендуется использовать сетевую библиотеку, так как нет необходимости изобретать велосипед. Но если вы застряли с использованием HttpClient
, а затем читать дальше.
РЕДАКТИРОВАТЬ: последние новости о Apache HttpClient (по состоянию на 11/07/2015)
Google Android 1.0 был выпущен с предварительной бета-версией Apache HttpClient. Чтобы совпасть с первым выпуском Android, API-интерфейсы Apache HttpClient 4.0 пришлось преждевременно заморозить, в то время как многие интерфейсы и внутренние структуры все еще не были полностью проработаны. По мере развития Apache HttpClient 4.0 проект ожидал, что Google включит последние усовершенствования кода в свое кодовое дерево. К сожалению, этого не произошло. Версия Apache HttpClient, поставляемая с Android, по сути стала форком. В конечном итоге Google решил прекратить дальнейшую разработку своего форка, отказавшись обновлять его до стандартной версии Apache HttpClient, указав в качестве причины такого решения проблемы совместимости. В результате те разработчики Android, которые хотели бы продолжать использовать API-интерфейсы Apache HttpClient на Android, не могут воспользоваться новыми функциями, улучшениями производительности и исправлениями ошибок. Порт Apache HttpClient 4.3 для Android был призван исправить ситуацию, предоставляя официальные выпуски, совместимые с Google Android. Учитывая, что по состоянию на API Android 23 вилка Google HttpClient была удалена, этот проект был прекращен.
Тем не менее, есть официальный Android-порт Apache HttpClient v4.3
Android API 22 и старше должны использовать Apache HttpClient v4.3
dependencies {
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}
Android API 23 и новее должны использовать пакеты Apache HttpClient для Android, поддерживаемые Мареком Себерой
dependencies {
compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1'
}
Информация взята с Apache.org
Документация 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);
Вызовите веб-сервис httpclient заменить на httpurlconnection
мой код здесь
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;
}