Android Academy · Lekcja

Retrofit i interfejsy REST API

Wykonuj żądania HTTP za pomocą Retrofit. Definiuj interfejsy API, analizuj JSON za pomocą Gson/Moshi, obsługuj odpowiedzi i błędy oraz integruj całość z korutynami.

Lekcja 1 z 611 kroki

Retrofit i interfejsy REST API to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 1 z 6. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 6 lekcji w sumie.

Czym jest Retrofit?

Retrofit to najpopularniejszy klient HTTP dla Androida, stworzony przez Square. Umożliwia zdefiniowanie REST API jako interfejsu Kotlin — bez powtarzalnego kodu HTTP.

  • Oznaczaj metody adnotacjami @GET, @POST itd.
  • Automatycznie konwertuje odpowiedzi JSON na klasy danych Kotlin
  • Natywna obsługa korutyn (suspend fun)

Dodawanie zależności

Dodaj Retrofit i konwerter Gson do app/build.gradle:

// app/build.gradle
dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.11.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'
}

// AndroidManifest.xml — add internet permission:
// <uses-permission android:name="android.permission.INTERNET" />

Definiowanie interfejsu API

Utwórz interfejs Kotlin opisujący endpointy API:

import retrofit2.http.*

data class Post(val id: Int, val title: String, val body: String, val userId: Int)

interface ApiService {

    @GET("posts")
    suspend fun getPosts(): List<Post>

    @GET("posts/{id}")
    suspend fun getPost(@Path("id") id: Int): Post

    @POST("posts")
    suspend fun createPost(@Body post: Post): Post

    @GET("posts")
    suspend fun getPostsByUser(@Query("userId") userId: Int): List<Post>
}

Tworzenie instancji Retrofit

Utwórz singletonową instancję Retrofit — zazwyczaj w object lub za pomocą Hilt:

import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

object RetrofitClient {
    private const val BASE_URL = "https://jsonplaceholder.typicode.com/"

    val api: ApiService by lazy {
        Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(ApiService::class.java)
    }
}

Wykonywanie żądania GET

Wywołaj API z Repository, korzystając z korutyn Kotlin:

class PostRepository {
    private val api = RetrofitClient.api

    suspend fun getPosts(): List<Post> {
        return api.getPosts()  // Retrofit handles threading for you
    }

    suspend fun getPost(id: Int): Post {
        return api.getPost(id)
    }
}

// In ViewModel:
fun loadPosts() {
    viewModelScope.launch {
        try {
            val posts = withContext(Dispatchers.IO) {
                repository.getPosts()
            }
            _posts.value = posts
        } catch (e: Exception) {
            _error.value = "Network error: ${e.message}"
        }
    }
}

Mapowanie JSON za pomocą Gson

Gson automatycznie konwertuje JSON na klasy danych Kotlin. Nazwy pól muszą odpowiadać kluczom JSON lub należy użyć @SerializedName:

import com.google.gson.annotations.SerializedName

data class User(
    val id: Int,
    val name: String,
    val email: String,
    @SerializedName("phone_number")  // JSON key is 'phone_number'
    val phoneNumber: String,
    @SerializedName("created_at")
    val createdAt: String
)

Żądanie POST z treścią

Wyślij dane do serwera za pomocą @POST i @Body:

// API interface:
@POST("users")
suspend fun createUser(@Body user: User): User

// In Repository:
suspend fun createUser(name: String, email: String): User {
    val newUser = User(id = 0, name = name, email = email, phoneNumber = "", createdAt = "")
    return api.createUser(newUser)
}

// In ViewModel:
fun registerUser(name: String, email: String) {
    viewModelScope.launch {
        val user = withContext(Dispatchers.IO) {
            repo.createUser(name, email)
        }
        _registeredUser.value = user
    }
}

Nagłówki i uwierzytelnianie

Dodaj nagłówki do każdego żądania za pomocą interceptora OkHttp:

import okhttp3.OkHttpClient
import okhttp3.Interceptor

val authClient = OkHttpClient.Builder()
    .addInterceptor { chain ->
        val request = chain.request().newBuilder()
            .addHeader("Authorization", "Bearer $token")
            .addHeader("Accept", "application/json")
            .build()
        chain.proceed(request)
    }
    .build()

val retrofit = Retrofit.Builder()
    .baseUrl(BASE_URL)
    .client(authClient)  // use our authenticated client
    .addConverterFactory(GsonConverterFactory.create())
    .build()

Obsługa błędów HTTP

Pomyślna odpowiedź HTTP (200–299) zwraca wartość. Odpowiedzi błędów (4xx, 5xx) zgłaszają HttpException. Zawsze obsługuj oba przypadki:

  • HttpException — serwer zwrócił kod statusu błędu
  • IOException — brak połączenia sieciowego

Szybkie sprawdzenie

Która adnotacja Retrofit mapuje parametr metody na segment ścieżki URL, taki jak /posts/{id}?

Podsumowanie: Retrofit i API

Potrafisz już pobierać dane z dowolnego REST API:

  • Zdefiniuj API za pomocą interfejsu Kotlin i adnotacji (@GET, @POST, @Path, @Query)
  • Utwórz instancję Retrofit z bazowym adresem URL i konwerterem Gson
  • Wywołuj funkcje zawieszane z korutyny w ViewModelu
  • Automatycznie mapuj JSON → klasy danych Kotlin
  • Obsługuj HttpException i IOException

Dalej: wyświetlanie obrazów z sieci za pomocą Coil.

Bezpłatny start

Ucz się Kotlin dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
36
Lekcje
152

Często zadawane pytania

Czy lekcja „Retrofit i interfejsy REST API” jest bezpłatna?

Tak — pełny tekst „Retrofit i interfejsy REST API” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 6 lekcji w sumie.

Co nauczysz się w „Retrofit i interfejsy REST API”?

Wykonuj żądania HTTP za pomocą Retrofit. Definiuj interfejsy API, analizuj JSON za pomocą Gson/Moshi, obsługuj odpowiedzi i błędy oraz integruj całość z korutynami. Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Android Academy?

Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 6.

Ile czasu zajmuje lekcja „Retrofit i interfejsy REST API”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?

Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Retrofit i interfejsy REST API
  2. Ładowanie obrazów za pomocą Coil
  3. Obsługa błędów i UX
  4. Powiadomienia push
  5. WorkManager i zadania w tle
  6. Publikowanie w Play Store
← Powrót do Android Academy