Передача Specifi c Id в API http URL Android Studio / Kotlin - PullRequest
0 голосов
/ 15 марта 2020

Я новичок в kotlin и android studio и пытаюсь создать приложение с использованием API статистики НХЛ. У меня есть запрос, который отправляет, чтобы получить все команды и некоторую другую информацию:

    fun getTeams(
        @Query("page") page: Int
    ): Call<TeamsResponse> 

Это класс модели:

data class teams (
    @SerializedName("id") val id: Long,
    @SerializedName("name") val name: String,
    @SerializedName("division") val division: division,
    @SerializedName("venue") val venue: venue
)

data class division (
    @SerializedName("name") val divName: String
)
data class venue (
    @SerializedName("name") val venName: String,
    @SerializedName("city") val venCity: String
)

И ответ:

data class TeamsResponse (
    @SerializedName("page") val page: Int,
    @SerializedName("teams") val teams: List<teams>,
    @SerializedName("total_pages") val pages: Int
)

Код для представления довольно прост. Он отображает всю информацию внутри модели команд в cardView, которую вы можете прокрутить. У меня также есть код, который получает ответ для реестра указанной c команды:

@GET("api/v1/teams/1/roster")
    fun getRoster(

        @Query("page") page: Int
    ): Call<RosterResponse>

, который возвращает список в список объектов 'person', например:

class RosterResponse (
    @SerializedName("page") val page: Int,
    @SerializedName("roster") val roster: List<roster>,
    @SerializedName("total_pages") val pages: Int

)

Мой вопрос: как я могу нажать на одну из команд и заменить «1» в «api / v1 / team / 1 / roster» на id команды, на которую нажали? Весь мой опыт работы с API связан с MVC с использованием c#, поэтому я пытался работать с ним, как в этом проекте. Я использую Retrofit для создания URL:

 private val api: API
    init {
        val retrofit = Retrofit.Builder()
            .baseUrl("https://statsapi.web.nhl.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
        api = retrofit.create(API::class.java)
    }

Есть ли способ, которым я могу передать идентификатор команды, когда она нажата для этой функции?

1 Ответ

0 голосов
/ 15 марта 2020

Вы должны использовать аннотацию @Path и передавать значение id в качестве аргумента при вызове этого метода:

@GET("api/v1/teams/{id}/roster")
fun getRoster(
    @Path(value = "id", encoded = false) key: Int,
): Call<RosterResponse>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...