#8 Pobieranie danych JSON w SWIFT

Witajcie, tym razem zajmiemy się pobieraniem danych w formacie JSON, prosto do naszej aplikacji. Na samym początku tworzymy nowy widok, oraz kontroler który zostanie mu przypisany. Wstawiamy tableView, nav bar oraz przycisk powrotu. Całość powinno wyglądać tak jak poniżej.

nowy controller view i table view

Następnie w kodzie dodajemy delegaty, oraz dwie metody do obsługi listy tak jak  w poprzedniej części, oraz akcje zamykająca widok dla przycisku wstecz.  Następnie musimy sprawdzić pod jakim adresem na serwerze wrzuciliśmy nasze API. Ważną kwestią będzie również to że odpytujemy je poprzez metodę GET, można również odpytywać metodą POST, PUT i DELETE, ale my skupimy się na tej prostszej.  Gdy już mamy adres, robimy nową zmienną NSURL.

let requestURL: NSURL = NSURL(string: "http://jakis_adres.pl/get_brands.php")!

Następnie użyjemy sesji i parsujemy całą odpowiedź, a cały kod wrzucamy do metody viewDidLoad(), czyli po załadowaniu aplikacji uruchomi się wszystko co znajduje się wewnątz.


let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL)
        let session = URLSession.shared
        let task = session.dataTask(with: urlRequest as URLRequest) {
            (data, response, error) -> Void in
            
            let httpResponse = response as! HTTPURLResponse
            let statusCode = httpResponse.statusCode
            
            if (statusCode == 200) {
                
                do{
                    
                    let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as? [[String: AnyObject]]
                    
                    for brand in json! {
                        
                        let name = brand["name"] as? String
                        let img  = brand["img"] as? String
                        
                        let br = ["name" : name, "img": img]
                        self.brands.append(br as! [String : String])
                    }
                    
                    self.tableView.reloadData()
                } catch {
                    print("Error with Json: \(error)")
                }
                
            } else{
                print("UWAGA ERROR")
            }
        }
        
        task.resume()

Jak widać tworzymy nowe zapytanie oraz sesję, a następnie sprawdzamy jaki jest kod odpowiedzi. Kody odpowiedzi serwera znajdziecie na internecie, popularne to 404 (strona nie znaleziona) 500 (serwer nie odpowiada) i 200 (odpowiedź ok) i my właśnie oczekujemy na odpowiedź z kodem 200, co będzie oznaczała że cała odpowiedź z serwera dotarła do nas poprawnie.

let name = brand["name"] as? String
let img  = brand["img"] as? String

Następnie w pętli odbieramy te dane, które wysyłamy z serwera. Należy pamiętać o tym jak je nazwaliśmy w naszym przypadku jest to name jako nazwa i img jako adres url. Zamiast adresu url możemy podać obrazek zakodowany w formacie base64 i dekodować go bezpośrednio ze stringa do UIImageView.

self.tableView.reloadData()

Na sam koniec przeładowujemy table view, po to aby dane pobrane zostały załadowane do widoku. Jeżeli wszystko pójdzie ok, to powinnismy zobaczyć pełną listę marek wysłanych z naszego serwer. Teraz wystarczy tylko dodać kolejne marki na serwerze, a aplikacja automatycznie je pobierze. Jeżeli wystąpił błąd to polecam sprawdzić konsolę błędów oraz dokładnie adres url i nazwy pól.

Całość standardowo zapisujemy i commitujemy na serwer, a w kolejnym wpisie zajmiemy si pobieraniem obrazków z adresu url.

Dodaj komentarz