Próbuję dowiedzieć się, jak POST JSON z Androida przy użyciu HTTPClient. Od jakiegoś czasu próbuję to rozgryźć, znalazłem wiele przykładów w Internecie, ale nie mogę zmusić żadnego z nich do działania. Uważam, że dzieje się tak z powodu mojego ogólnego braku wiedzy na temat JSON / sieci. Wiem, że istnieje wiele przykładów, ale czy ktoś mógłby wskazać mi rzeczywisty samouczek? Szukam procesu krok po kroku z kodem i wyjaśnieniem, dlaczego wykonujesz każdy krok lub co robi ten krok. Nie musi to być skomplikowana, prosta próba.
Ponownie, wiem, że jest mnóstwo przykładów, naprawdę szukam przykładu z wyjaśnieniem, co dokładnie się dzieje i dlaczego tak się dzieje.
Jeśli ktoś wie o dobrej książce o Androidzie na ten temat, daj mi znać.
Jeszcze raz dziękuję za pomoc @terrance, oto kod, który opisałem poniżej
public void shNameVerParams() throws Exception{
String path = //removed
HashMap params = new HashMap();
params.put(new String("Name"), "Value");
params.put(new String("Name"), "Value");
try {
HttpClient.SendHttpPost(path, params);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
źródło
Odpowiedzi:
W tej odpowiedzi korzystam z przykładu opublikowanego przez Justina Grammensa .
O JSON
JSON to skrót od JavaScript Object Notation. We właściwościach JavaScript można odwoływać się zarówno w ten sposób,
object1.name
jak i w ten sposóbobject['name'];
. Przykład z artykułu wykorzystuje ten bit JSON.Obiekt
wentylatora Parts A z adresem e-mail jako kluczem i wartością [email protected]
Zatem odpowiednikiem obiektu byłoby
fan.email;
orfan['email'];
. Obie miałyby tę samą wartość'[email protected]'
.O żądaniu HttpClient
Poniżej opisano, czego nasz autor użył do wykonania żądania HttpClient . W ogóle nie twierdzę, że jestem ekspertem w tej dziedzinie, więc jeśli ktoś ma lepszy sposób na sformułowanie części terminologii, nie krępuj się.
Mapa
Jeśli nie znasz
Map
struktury danych, zapoznaj się z dokumentacją Java Map . Krótko mówiąc, mapa jest podobna do słownika lub skrótu.Nie krępuj się komentować wszelkich pytań, które pojawiają się w związku z tym postem lub jeśli nie powiedziałem czegoś jasnego, lub jeśli nie poruszyłem czegoś, co nadal jest dla Ciebie zdezorientowane ... itd., Co naprawdę pojawia się w twojej głowie.
(Zrezygnuję, jeśli Justin Grammens się nie zgodzi. Ale jeśli nie, to dziękuję Justinowi za to, że był cool.)
Aktualizacja
Po prostu przypadkiem otrzymałem komentarz o tym, jak używać kodu i zdałem sobie sprawę, że wystąpił błąd w typie zwrotu. Podpis metody został ustawiony tak, aby zwracał ciąg, ale w tym przypadku nic nie zwracał. Zmieniłem sygnaturę na HttpResponse i skieruję Cię do tego linku na stronie Uzyskiwanie odpowiedzi Body of HttpResponse . Zmienna ścieżki to adres URL i zaktualizowałem, aby naprawić błąd w kodzie.
źródło
getJsonObjectFromMap()
: JSONObject ma konstruktora, który przyjmujeMap
: developer.android.com/reference/org/json/…Oto alternatywne rozwiązanie dla odpowiedzi @ Terrance. Możesz łatwo zlecić konwersję. Biblioteka Gson robi wspaniałą pracę konwersji różnych struktur danych język JSON i na odwrót.
Podobnie można zrobić, używając Jackson zamiast Gson. Polecam również przyjrzeć się Retrofit, który ukrywa dla ciebie wiele tego standardowego kodu. Bardziej doświadczonym programistom polecam wypróbowanie RxAndroid .
źródło
execute()
i oczywiście się nie udałoZalecam używanie tego
HttpURLConnection
zamiast tegoHttpGet
. JakHttpGet
już jest przestarzałe na poziomie 22 interfejsu API systemu Android.źródło
Za dużo kodu do tego zadania, pobierz tę bibliotekę https://github.com/kodart/Httpzoid Wykorzystuje wewnętrznie GSON i zapewnia API, które działa z obiektami. Wszystkie szczegóły JSON są ukryte.
źródło
Istnieje kilka sposobów nawiązania połączenia HHTP i pobrania danych z usługi sieciowej RESTFULL. Najnowszy to GSON. Ale zanim przejdziesz do GSON, musisz mieć pojęcie o najbardziej tradycyjnym sposobie tworzenia klienta HTTP i komunikacji danych ze zdalnym serwerem. Wspomniałem o obu metodach wysyłania żądań POST i GET przy użyciu HTTPClient.
źródło