Fetch pokemon

This commit is contained in:
Joren 2024-04-29 13:45:49 +02:00
parent 5ff9afaa87
commit 57cc5c827b
Signed by untrusted user who does not match committer: Joren
GPG Key ID: 280E33DFBC0F1B55
3 changed files with 53 additions and 1 deletions

View File

@ -66,4 +66,6 @@ dependencies {
debugImplementation(libs.androidx.ui.test.manifest) debugImplementation(libs.androidx.ui.test.manifest)
implementation("androidx.navigation:navigation-compose:$nav_version") implementation("androidx.navigation:navigation-compose:$nav_version")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
} }

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<application <application
android:allowBackup="true" android:allowBackup="true"

View File

@ -1,11 +1,60 @@
package com.ti.mobpo.ui package com.ti.mobpo.ui
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.google.gson.annotations.SerializedName
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.GET
// Data class to hold Pokemon species information
data class PokemonSpecies(
@SerializedName("name") val name: String,
@SerializedName("url") val url: String
)
// Data class to hold the response from the Pokemon species API
data class PokemonSpeciesResponse(
@SerializedName("results") val results: List<PokemonSpecies>
)
interface PokeApiService {
@GET("pokemon-species/?offset=0&limit=1025")
fun getPokemonSpecies(): Call<PokemonSpeciesResponse>
}
class PokeSearchViewModel : ViewModel() { class PokeSearchViewModel : ViewModel() {
private val retrofit = Retrofit.Builder()
.baseUrl("https://pokeapi.co/api/v2/")
.addConverterFactory(GsonConverterFactory.create())
.build()
private val service = retrofit.create(PokeApiService::class.java)
private val _uiState = MutableStateFlow(PokeSearchUiState()) private val _uiState = MutableStateFlow(PokeSearchUiState())
val uiState: StateFlow<PokeSearchUiState> = _uiState.asStateFlow() val uiState: StateFlow<PokeSearchUiState> = _uiState.asStateFlow()
} private var pokemonList: List<PokemonSpecies>? = null
init {
fetchPokemonSpecies()
}
private fun fetchPokemonSpecies() {
service.getPokemonSpecies().enqueue(object : retrofit2.Callback<PokemonSpeciesResponse> {
override fun onResponse(call: Call<PokemonSpeciesResponse>, response: retrofit2.Response<PokemonSpeciesResponse>) {
if (response.isSuccessful) {
val speciesResponse = response.body()
pokemonList = speciesResponse?.results
}
}
override fun onFailure(call: Call<PokemonSpeciesResponse>, t: Throwable) {
/*TODO*/
}
})
}
}