実現したいこと
PokeApiを使用して、受け取ったJson文字列をStringに変換して表示したい
https://pokeapi.co/docs/v2
発生している問題・エラーメッセージ
API通信がうまくいっていないようで、
PokeViewModel.kt#getPokemonInfo()で非同期でgetPokeData("chikorita")を叩いています。しかし、Exceptionをキャッチするルートを通っているので、取得できていません。
原因がよくわからないため、教えていただけると助かります。
該当のソースコード
PokeApiService.ktでURLの設定やGETメソッドを定義しています。
PokeViewModel.ktでAPIを叩いています。
PokeApiService.kt
1private const val BASE_URL = "https://pokeapi.co/api/v2/" 2 3private val retrofit = Retrofit 4 .Builder() 5 .addConverterFactory(ScalarsConverterFactory.create()) 6 .baseUrl(BASE_URL) 7 .build() 8 9interface PokeApiService { 10 @GET("pokemon/{name}/") 11 suspend fun getPokeData(@Path("name") name: String): String 12} 13 14object PokeApi { 15 val retrofitService: PokeApiService by lazy { 16 retrofit.create(PokeApiService::class.java) 17 } 18}
PokeViewModel.kt
1class PokeViewModel: ViewModel() { 2 companion object { 3 const val TAG = "PokeViewModel" 4 } 5 var pokeUiState: PokeUiState by mutableStateOf(PokeUiState.Loading) 6 private set 7 8 init { 9 getPokemonInfo() 10 } 11 12 private fun getPokemonInfo() { 13 Log.d(TAG, "getPokeList") 14 viewModelScope.launch { 15 pokeUiState = try { 16 val pokeInfo = PokeApi.retrofitService.getPokeData("chikorita") 17 PokeUiState.Success(pokeInfo) 18 } catch (e: Exception) { 19 Log.e(TAG, "getPokeList failed") 20 PokeUiState.Error 21 } 22 } 23 } 24}

回答1件
あなたの回答
tips
プレビュー