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.
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,@POSTitd. - 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łęduIOException— 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
HttpExceptioniIOException
Dalej: wyświetlanie obrazów z sieci za pomocą Coil.
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
- Retrofit i interfejsy REST API
- Ładowanie obrazów za pomocą Coil
- Obsługa błędów i UX
- Powiadomienia push
- WorkManager i zadania w tle
- Publikowanie w Play Store