Android Academy · leksjon

Retrofit og REST-API-er

Send HTTP-forespørsler med Retrofit. Definer API-grensesnitt, analyser JSON med Gson/Moshi, håndter svar og feil, og integrer med coroutines.

Leksjon 1 av 611 trinn

Retrofit og REST-API-er er en gratis leksjon i Android Academy på CoddyKit. Dette er leksjon 1 av 6. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Android Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Android Academy inneholder totalt 6 leksjoner.

Hva er Retrofit?

Retrofit er den mest populære HTTP-klienten for Android, utviklet av Square. Den lar Dem definere REST API-et som et Kotlin-grensesnitt — uten overflødig HTTP-kode.

  • Annoter metoder med @GET, @POST og så videre
  • Konverterer JSON-svar automatisk til Kotlin-dataclasses
  • Innebygd støtte for coroutines (suspend fun)

Legge til avhengigheter

Legg Retrofit og Gson-konverteren til i 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" />

Definere API-grensesnittet

Opprett et Kotlin-grensesnitt som beskriver API-endepunktene:

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>
}

Opprette Retrofit-instansen

Opprett én Retrofit-instans — vanligvis i et object eller via 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)
    }
}

Utføre en GET-forespørsel

Kall API-et fra et Repository ved hjelp av Kotlin-coroutines:

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}"
        }
    }
}

Gson JSON-tilordning

Gson konverterer JSON til Kotlin-dataclasses automatisk. Feltnavnene må samsvare med JSON-nøklene, eller De kan bruke @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
)

POST-forespørsel med body

Send data til en server ved hjelp av @POST og @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
    }
}

Headere og autentisering

Legg til headere i hver forespørsel ved hjelp av en OkHttp-interceptor:

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()

Håndtere HTTP-feil

Et vellykket HTTP-svar (200–299) returnerer en verdi. Feilsvar (4xx, 5xx) kaster et HttpException. Håndter alltid begge:

  • HttpException — serveren returnerte en feilkode
  • IOException — ingen nettverkstilkobling

Kort kontroll

Hvilken Retrofit-annotasjon knytter en metodeparameter til et URL-bane segment som /posts/{id}?

Oppsummering: Retrofit og API-er

De kan nå hente data fra alle REST API-er:

  • Definer API-et med et Kotlin-grensesnitt og annotasjoner (@GET, @POST, @Path, @Query)
  • Opprett en Retrofit-instans med base-URL og Gson-konverter
  • Kall suspend-funksjoner fra en coroutine i ViewModel
  • Tilordne JSON → Kotlin-dataclasses automatisk
  • Håndter HttpException og IOException

Neste: Vis nettverksbilder med Coil.

Gratis å komme i gang

Lær deg Kotlin med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
36
Leksjoner
152

Ofte stilte spørsmål

Er leksjonen «Retrofit og REST-API-er» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Android Academy, inkludert «Retrofit og REST-API-er», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Android Academy inneholder totalt 6 leksjoner.

Hva lærer jeg i «Retrofit og REST-API-er»?

Send HTTP-forespørsler med Retrofit. Definer API-grensesnitt, analyser JSON med Gson/Moshi, håndter svar og feil, og integrer med coroutines. Du øver på Android Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Android Academy?

Ingen tidligere erfaring er nødvendig. Android Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 6.

Hvor lang tid tar leksjonen «Retrofit og REST-API-er»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Android Academy-leksjonen?

Ja. Alle Android Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Retrofit og REST-API-er
  2. Laste inn bilder med Coil
  3. Feilhåndtering og brukeropplevelse
  4. Push-varsler
  5. WorkManager og bakgrunnsoppgaver
  6. Publisering i Play Store
← Tilbake til Android Academy