Android Academy · Oppitunti

Retrofit ja REST-rajapinnat

Tehkää HTTP-pyyntöjä Retrofitillä. Määrittäkää API-rajapinnat, jäsentäkää JSON Gsonilla tai Moshilla, käsitelkää vastaukset ja virheet sekä yhdistäkää toiminta korutiineihin.

Oppitunti 1/611 vaihetta

Retrofit ja REST-rajapinnat on ilmainen Android Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/6. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 6 oppituntia.

Mikä on Retrofit?

Retrofit on Squaren kehittämä Androidin suosituin HTTP-asiakas. Sen avulla REST API voidaan määritellä Kotlin-rajapintana ilman toistuvaa HTTP-koodia.

  • Merkitse metodit annotaatioilla @GET, @POST jne.
  • Muuntaa JSON-vastaukset automaattisesti Kotlinin dataluokiksi
  • Alkuperäinen korutiinituki (suspend fun)

Riippuvuuksien lisääminen

Lisää Retrofit ja Gson-muunnin tiedostoon 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" />

API-rajapinnan määrittäminen

Luo Kotlin-rajapinta, joka kuvaa API-päätepisteet:

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

Retrofit-instanssin luominen

Luo Singleton-muotoinen Retrofit-instanssi — yleensä object-rakenteeseen tai Hiltin avulla:

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

GET-pyynnön tekeminen

Kutsu API:a Repositorysta Kotlin-korutiinien avulla:

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

Gsonin JSON-kenttien yhdistäminen

Gson muuntaa JSON-tiedot automaattisesti Kotlinin dataluokiksi. Kenttien nimien on vastattava JSON-avaimia, tai voit käyttää annotaatiota @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-pyyntö rungon kanssa

Lähetä tietoja palvelimelle käyttämällä annotaatioita @POST ja @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
    }
}

Otsakkeet ja todennus

Lisää otsakkeet jokaiseen pyyntöön OkHttp-interceptorin avulla:

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

HTTP-virheiden käsittely

Onnistunut HTTP-vastaus (200–299) palauttaa arvon. Virhevastaus (4xx, 5xx) aiheuttaa HttpException-poikkeuksen. Käsittele aina molemmat tilanteet:

  • HttpException — palvelin palautti virheen sisältävän tilakoodin
  • IOException — verkkoyhteyttä ei ole

Pikakertaus

Mikä Retrofit-annotaatio yhdistää metodin parametrin URL-polun osaan, kuten /posts/{id}?

Kertaus: Retrofit ja API:t

Osaat nyt hakea tietoja mistä tahansa REST API:sta:

  • Määritä API Kotlin-rajapinnan ja annotaatioiden avulla (@GET, @POST, @Path, @Query)
  • Luo Retrofit-instanssi perus-URL-osoitteella ja Gson-muuntimella
  • Kutsu suspend-funktioita ViewModelin korutiinista
  • Yhdistä JSON → Kotlinin dataluokiksi automaattisesti
  • Käsittele HttpException- ja IOException-poikkeukset

Seuraavaksi: näytä verkosta ladattuja kuvia Coililla.

Aloita maksutta

Opi Kotlin tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
36
Oppitunnit
152

Usein kysytyt kysymykset

Onko oppitunti ”Retrofit ja REST-rajapinnat” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “Retrofit ja REST-rajapinnat”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Android Academy-kurssilla on yhteensä 6 oppituntia.

Mitä opin oppitunnilla ”Retrofit ja REST-rajapinnat”?

Tehkää HTTP-pyyntöjä Retrofitillä. Määrittäkää API-rajapinnat, jäsentäkää JSON Gsonilla tai Moshilla, käsitelkää vastaukset ja virheet sekä yhdistäkää toiminta korutiineihin. Harjoittelet Android Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Android Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Android Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/6.

Kuinka kauan ”Retrofit ja REST-rajapinnat”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Android Academy-oppitunnilla?

Kyllä. Jokainen Android Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Retrofit ja REST-rajapinnat
  2. Kuvien lataaminen Coililla
  3. Virheenkäsittely ja käyttökokemus
  4. Push-ilmoitukset
  5. WorkManager ja taustatehtävät
  6. Julkaiseminen Play Storessa
← Takaisin: Android Academy