2015-03-19 4 views
42

С выпуском Android 5.1, похоже, что все материалы Apache http устарели. Глядя на документацию бесполезно; все они говорятHttpEntity устарел на Android сейчас, какова альтернатива?

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.

EDIT

Я решил просто переписать сетевой материал. Собираюсь попробовать использовать Дооснащение и OkHttp

EDIT

серьезно взглянуть на переключение на ваши звонки и прочее дооснащения. Довольно изящный. Я рад, что сделал. Было несколько препятствий, но это круто.

+0

Вы можете посмотреть на [как перейти от HttpClient к HttpUrlConnection] (http://stackoverflow.com/questions/26898667/how-to-switch-from-httpclient-to-httpurlconnection/26903289#26903289) – hgoebl

+0

Если какой-либо из приведенных ниже ответов помог вам, y ou должен подчеркнуть самый полезный. – C0D3LIC1OU5

+0

Использование «OkHttp» - это разумный выбор. –

ответ

20

Вы всегда можете импортировать последнего клиента Apache Http и использовать его. Кроме того, вы можете взглянуть на сетевую библиотеку, такую ​​как Volley или Retrofit, на всякий случай, когда вы можете использовать ее. Если вы начинаете новый проект, рекомендуется использовать сетевую библиотеку, потому что нет необходимости изобретать велосипед. Но если вы застряли с использованием HttpClient, тогда читайте дальше.

EDIT: Последние новости на Apache HTTPClient (по состоянию на 11/07/2015)

Google Android 1.0 был выпущен с предварительно БЕТА снимок Apache HttpClient. Совпадение с первым выпуском Android Apache API HttpClient 4.0 пришлось заморозить преждевременно, в то время как многие из интерфейсов и внутренние структуры все еще не были полностью разработаны. Как Apache HttpClient 4.0 созревал, проект ожидал, что Google до включает в себя последние улучшения кода в своем кодовом дереве. К сожалению, этого не произошло. Версия Apache HttpClient отправлена ​​ с Android, фактически превратилась в вилку. В конце концов Google решил прекратить дальнейшее развитие своей вилки, отказываясь до обновление до версии запаса Apache HttpClient со ссылкой на совместимость относится к числу причин такого решения. В результате разработчики Android , которые хотели бы продолжать использовать API Apache HttpClient на , не могут использовать новые функции, производительность исправления и исправления ошибок. Apache HttpClient 4.3 для Android был , предназначенный для исправления ситуации, предоставляя официальные версии , совместимые с Google Android. Учитывая, что с Android API 23 Google fork 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 maintained by Marek Sebera

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

Информация взята из Apache.org

+1

Как мне было не очевидно: вам также нужно изменить 'import org.apache.http.whatever' для' import cz.msebera.android.httpclient.whatever'. – Timmmm

+0

Кажется, что «cz.msebera.android» httpclient тоже устарел? При попытке создания APK Android Studio сбой и предупреждения о том, что httpclient теперь конфликтует с классами, предоставляемыми Android – Nom1fan

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); 
+0

Правильно, сэр. – TechNyquist

+0

, возможно, вы правы для части клиента http ... комментарий абсолютно нелепо для части http-сервера (или URL.openConnection теперь может служить тоже ?! ;-) –

+2

Если вы читаете этот URL-адрес. http://android-developers.blogspot.in/2011/09/androids-http-clients.html ** Какой клиент лучше всего? ** ** У Apache HTTP-клиента меньше ошибок на Eclair и Froyo. Это лучший выбор для этих выпусков. ** ** Для Gingerbread и лучше, HttpURLConnection - лучший выбор. ** Его простой API и небольшие размеры делают его очень подходящим для Android.Прозрачное сжатие и ответное кэширование уменьшают использование сети, улучшают скорость и экономят батарею. Новые приложения должны использовать HttpURLConnection; именно там мы будем тратить нашу энергию вперед. –

2

Вызов вебсервис 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; 
    } 
Смежные вопросы