質問編集履歴
2
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,10 +2,8 @@
|
|
2
2
|
|
3
3
|
Android開発勉強中の者です。Retrofitを使用した通信ができないため、質問させていただきます。具体的には、Retrofitを用いたinterfaceをどのように書けばよいかが分かりませんでした。
|
4
4
|
|
5
|
-
|
5
|
+
リクエストのレスポンスとして返されたnameとimgをそれぞれテキスト、画像としてRecyclerViewを用いて描画したいです。その際、リストの型をうまく書くことができません。
|
6
6
|
|
7
|
-
このリクエストのレスポンスとして返されたnameとimgをそれぞれテキスト、画像としてRecyclerViewを用いて描画したいです。その際、リストの型をうまく書くことができません。
|
8
|
-
|
9
7
|
### 該当のソースコード
|
10
8
|
|
11
9
|
APIのsuspend関数の戻り値をどう書けばよいか分かりません。
|
1
問題文の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -8,15 +8,8 @@
|
|
8
8
|
|
9
9
|
### 該当のソースコード
|
10
10
|
|
11
|
-
|
11
|
+
APIのsuspend関数の戻り値をどう書けばよいか分かりません。
|
12
12
|
|
13
|
-
```kotlin
|
14
|
-
interface PokemonApi {
|
15
|
-
@GET("pokedex.json")
|
16
|
-
suspend fun getPokemon(): Response<List<Pokemon>>
|
17
|
-
}
|
18
|
-
```
|
19
|
-
|
20
13
|
JSONを基に作成したdataクラス
|
21
14
|
```kotlin
|
22
15
|
data class Pokemon(
|
@@ -75,30 +68,7 @@
|
|
75
68
|
})
|
76
69
|
}
|
77
70
|
```
|
78
|
-
MainViewModel
|
79
|
-
```kotlin
|
80
|
-
class MainViewModel(private val repository: Repository): ViewModel() {
|
81
71
|
|
82
|
-
val pokemons: MutableLiveData<Response<List<Pokemon>>> = MutableLiveData()
|
83
|
-
|
84
|
-
fun getPokemon(){
|
85
|
-
viewModelScope.launch{
|
86
|
-
val response: Response<List<Pokemon>> = repository.getPokemon()
|
87
|
-
pokemons.value = response
|
88
|
-
}
|
89
|
-
}
|
90
|
-
}
|
91
|
-
```
|
92
|
-
Repository
|
93
|
-
```kotlin
|
94
|
-
class Repository {
|
95
|
-
|
96
|
-
suspend fun getPokemon(): Response<List<Pokemon>> {
|
97
|
-
val response: Response<List<Pokemon>> = RetrofitInstance.api.getPokemon()
|
98
|
-
return response
|
99
|
-
}
|
100
|
-
}
|
101
|
-
```
|
102
72
|
Adapterのコンストラクタ内のpokemonListをどのように書けばよいのか分かりませんでした。型を上記のinterfaceと同じResponse<List<Pokemon>>にした場合、リストの中身を参照できず、onBindViewHolder等で怒られてしまいます。
|
103
73
|
```kotlin
|
104
74
|
class PokemonAdapter(private var context: Context, private var pokemonList: List<Pokemon>) :
|
@@ -145,11 +115,6 @@
|
|
145
115
|
|
146
116
|
・interfaceで定義したsuspend関数の戻り値の型をResponseを使用せず、List<Pokemon>にしたが、その場合、実行時、JSONをパース出来ないと怒られてしまいます。
|
147
117
|
|
148
|
-
・
|
118
|
+
・新しくdata classを定義してみるが、上記と同様にAdaoterをかくことができなかった。
|
149
|
-
```kotlin
|
150
|
-
data class PokemonList(
|
151
|
-
var pokemon: List<Pokemon>? = null
|
152
|
-
)
|
153
|
-
```
|
154
119
|
|
155
120
|
・Retrofitでは、Resoonseではなく、Callというものも使用できるようなので、Callを試したが、うまく書くことができなかった。
|