2015-03-19 14 views
42

Po wydaniu Androida 5.1 wygląda na to, że wszystkie pliki http Apache zostały wycofane. Patrzenie na dokumentację jest bezużyteczne; wszyscy mówiąHttpEntity jest obecnie przestarzałe na Androida, jaka jest alternatywa?

This class was deprecated in API level 22. Please use openConnection() instead. Please visit this webpage for further details.

co jest w porządku po raz pierwszy ją przeczytać, ale gdy każda klasa, która została zaniechana mówi, że to nie jest to pomocne.

W każdym razie, jakie są alternatywy dla klas jak HttpEntity konkretnie StringEntity i MultipartEntity? Zastąpiłem BasicNameValuePair dla mojej własnej implementacji klasy Android Pair<T, S> i wygląda na to, że URLEncoder.encode jest dobrym zamiennikiem dla URLEncodedUtils, ale nie jestem pewien co zrobić z HttpEntity.

EDIT

Zdecydowałem tylko do ponownego zapisu rzeczy sieci. Zamierzam spróbować użyć i modernizowanych OkHttp

EDIT

Poważnie przyjrzeć przełączania połączeń i rzeczy do modernizacji. Całkiem fajne. Cieszę się, że to zrobiłem. Było kilka przeszkód, ale jest fajnie.

+0

Można rzucić okiem na [Jak przełączyć się z HttpClient do HttpUrlConnection] (http://stackoverflow.com/questions/26898667/how-to-switch-from-httpclient-to-httpurlconnection/26903289#26903289) – hgoebl

+0

Jeśli którakolwiek z poniższych odpowiedzi ci pomogła, y Powinieneś zaakcentować najbardziej przydatny. – C0D3LIC1OU5

+0

Używanie 'OkHttp' jest mądrym wyborem. –

Odpowiedz

20

Zawsze możesz zaimportować ostatniego klienta Apache Http i użyć go. Możesz również rzucić okiem na bibliotekę sieciową, taką jak Volley lub Retrofit, na wypadek gdybyś mógł jej użyć zamiast tego. W przypadku rozpoczynania nowego projektu zaleca się korzystanie z biblioteki sieciowej, ponieważ nie ma potrzeby ponownego odkrywania koła. Ale jeśli utkniesz przy użyciu HttpClient, czytaj dalej.

EDIT: Ostatnie nowości w Apache HttpClient (stan na 11/07/2015)

Google Android 1.0 został wydany z snapshot pre-beta Apache httpclient. Zbiegając się z pierwszym wydaniem Androida Apache interfejsy API HttpClient 4.0 musiały zostać przedwcześnie zamrożone, podczas gdy wiele interfejsów i struktur wewnętrznych nie zostało jeszcze w pełni opracowanych. W miarę dojrzewania projektu Apache HttpClient 4.0, program oczekiwał, że program Google do wersji będzie zawierał najnowsze poprawki do kodu w drzewie kodu. Niestety tak się nie stało. Wersja Apache HttpClient wysłana z Androidem stała się widelcem. Ostatecznie Google zdecydowało, że zaprzestanie dalszego rozwoju swojego widelca, odmawiając aktualizacji do wersji podstawowej Apache HttpClient podając zgodność jako powód takiej decyzji. W rezultacie ci programiści z Androidem, którzy chcieliby nadal korzystać z API Apache HttpClient na Android, nie mogą korzystać z nowszych funkcji, poprawek wydajności i poprawek. Port Apache HttpClient 4.3 dla Androida był przeznaczony do naprawienia sytuacji poprzez zapewnienie oficjalnych wersji kompatybilnych z Google Android. Biorąc pod uwagę, że od wersji Android API 23 rozwidlenie Google'a HttpClient zostało usunięte, projekt ten został wycofany z oferty .

Jednak nie jest oficjalnym Android port v4.3 Apache httpclient

Android API 22 i starsze należy użyć Apache httpclient v4.3

dependencies { 
     compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' 
} 

Android API 23 i nowszy powinien używać pakietów Apache HttpClient dla Androida maintained by Marek Sebera

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

Informacje zaczerpnięte z Apache.org

+1

Ponieważ nie było to dla mnie oczywiste: Musisz również zmienić 'import org.apache.http.whatever' na' import cz.msebera.android.httpclient.whatever'. – Timmmm

+0

Wygląda na to, że httpclient "cz.msebera.android" jest teraz przestarzały? Podczas próby zbudowania APK Android Studio zawiedzie i informuje, że klient httpclient jest teraz w konflikcie z klasami dostarczonymi przez Androida. – Nom1fan

12

HttpClient Punkty dokumentacji, którą we właściwym kierunku:

org.apache.http.client.HttpClient:

Ten interfejs jest potępiany na poziomie API 22. Proszę używać OpenConnection() zamiast. Więcej informacji można znaleźć na tej stronie.

oznacza, że ​​należy przełączyć na java.net.URL.openConnection().

Oto jak można to zrobić:

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

Zgadza się, sir. – TechNyquist

+0

Być może masz rację dla części klienta http ... komentarz jest absolutnie niedorzeczny dla części serwera http (lub czy URL.openConnection może teraz również służyć ?! ;-) –

+2

Jeśli czytasz ten adres URL. http://android-developers.blogspot.in/2011/09/androids-http-clients.html ** Który klient jest najlepszy? ** ** Klient HTTP Apache ma mniej błędów na Eclair i Froyo. Jest to najlepszy wybór w przypadku tych wydań. ** ** Dla piernika i lepiej, HttpURLConnection to najlepszy wybór. ** Jego proste API i niewielkie rozmiary sprawiają, że doskonale nadaje się do systemu Android.Przejrzyste buforowanie kompresji i odpowiedzi zmniejsza zużycie sieci, zwiększa szybkość i oszczędza baterię. Nowe aplikacje powinny używać HttpURLConnection; właśnie tam będziemy wydawać energię na przyszłość. –

2

połączeń usługa httpclient zastąpić HttpURLConnection

mój kod tutaj

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; 
    } 
Powiązane problemy