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.
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,@POSTjne. - 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 tilakoodinIOException— 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- jaIOException-poikkeukset
Seuraavaksi: näytä verkosta ladattuja kuvia Coililla.
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
- Retrofit ja REST-rajapinnat
- Kuvien lataaminen Coililla
- Virheenkäsittely ja käyttökokemus
- Push-ilmoitukset
- WorkManager ja taustatehtävät
- Julkaiseminen Play Storessa