Klient http Apache lub URLConnection [duplikat]

To pytanie ma już odpowiedź tutaj:

Muszę pobrać stronę internetową w aplikacji na Androida i mam trudności z podjęciem decyzji, czy użyć klienta HTTP Apache dla Androida, czy URLConnection dla Javy.

Jakieś pomysły?

Author: Joachim Sauer, 2011-01-26

3 answers

Dla większości rzeczy powiedziałbym, że {[0] } jest droga do zrobienia. Jednak są pewne sytuacje i skrajne przypadki, w których spadłbym z powrotem do URLConnection. Przykłady przypadków skrajnych tutaj i tutaj

EDIT
Podobne pytanie zostało zadane wcześniej: httpclient vs httpurlconnection . zakładam, że HttpUrlConnection jest nieco szybszy, ponieważ {[0] } jest zbudowany na bazie standardowych bibliotek Javy. Jednak znalazłbym HttpClient kod znacznie szybciej i łatwiej pisać i utrzymywać. Zgodnie z poniższym komentarzem, główne elementy HttpClient zostały zoptymalizowane pod kątem wydajności.

Jeśli wydajność jest głównym problemem najlepiej jest napisać dwóch klientów, po jednym przy użyciu każdej metody, a następnie porównać je oba. Jeśli to zrobisz, daj nam znać wyniki.

 25
Author: dave.c,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:30:55

Google po cichu wycofało użycie klienta HTTP Apache od czasu Pierniconu: http://android-developers.blogspot.com/2011/09/androids-http-clients.html . i chociaż nie oznaczyli go przestarzałą adnotacją, sugerują użycie HttpURLConnection dla nowych aplikacji jako: it is where we [Google] will be spending our energy going forward.

Osobiście nie podoba mi się ta decyzja i wolałbym trzymać się HttpClient 4.1+, ponieważ jest szybszy, ma mniej błędów i jest regularnie aktualizowany. I choć nie można uaktualnić biblioteki systemowej do Wersja 4.1, możesz dołączyć HttpClient jar do projektu Androida (jako dodatkową zaletę, która pozwoli Ci nie polegać na poprawkach błędów Google i aktualizacjach dostawców). Jest jednak jedna pułapka: aby zapobiec ewentualnym kolizjom z wbudowaną biblioteką, należy zmienić nazwy pakietów httpclient za pomocą narzędzia JarJar. Okazało się, że ktoś już to zrobił (przepakowane projekty jar i biblioteki Android są dostępne do pobrania):

Http://code.google.com/p/httpclientandroidlib/

Jest to przepakowanie HttpClient 4.1 Dla Androida. Wersja HttpClient w Android SDK to 4. 0beta2. Było kilka aktualizacje HttpClient i kilka bardzo potrzebnych poprawek, takich jak buforowanie auth od wersji 4.0 beta.

Ponieważ Google wycofało HttpClient na rzecz standardu Java HttpURLConnection stworzyłem skrypt do konwersji akcji HttpClient Apache ' a do Biblioteka Androida.

Zmiany w magazynie HttpClient

  • zmieniono nazwę wszystkich pakietów org.Apacz.http do ch.boye.httpclientandroidlib
  • usunięto wszystkie klasy zależne od org.ietf.* (SPNEGO authentication)
  • zastąpiła org.Apacz.commons.kodek.binary.Base64 z Androidem.util.Base64
  • utworzono nową klasę HttpClientAndroidLog, aby zastąpić org.Apacz.commons.logowanie
 44
Author: Idolon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-12 16:17:48

W Gingerbread i Później, HttpURLConnection jest drogą do zrobienia. rozważ Apache HttpClient przestarzały. (zauważ również, że Android nie używa HttpClient 4.1, o czym wspomniano w innym komentarzu.)

Jeśli masz przypadek, w którym Apache HttpClient jest szybszy, zgłoś go jako błąd tutaj: http://code.google.com/p/android/issues/list

 14
Author: Elliott Hughes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-10 19:27:05