У меня есть интерфейс для генерации конкретного клиентского класса Retrofit, например:
interface SyncService {
@GET("event/sampleValue")
fun currentEvent(): Call<CurrentEventResponse>
@GET("event")
fun getEvents(): Call<List<EventResponse>>
@POST("Answer")
fun sendAnswers(@Body requests: Array<AnswerRequest>): Call<SendAnswerResponse>
}
Затем мне нужно поставить в очередь вызовы currentEvent () и getEvents () в моем классе ViewModel:
class SettingsViewModel(
application: Application,
) : AndroidViewModel(application), Callback<List<EventResponse>> {
// ...
private fun getEvents() {
ApiClient.syncService().getEvents().enqueue(this)
}
fun getCurrentEventData() {
ApiClient.syncService().currentEvent().enqueue(this)
}
/**
* Failure event handler for the getEvents API request.
*/
override fun onFailure(call: Call<List<EventResponse>>, t: Throwable) {
LOGE(TAG, "getEvents API request failed.", t)
}
/**
* Response event handler for the getEvents API request.
*/
override fun onResponse(call: Call<List<EventResponse>>, response: Response<List<EventResponse>>) {
if (response.isSuccessful) {
response.body()?.let { events.addAll(it) }
}
}
}
Проблема здесь в том, что я не могу заставить класс SettingsViewModel
реализовать и Callback<List<EventResponse>>
, и Callback<CurrentEventResponse>
, поскольку он утверждает, что сигнатура JVM одинакова.
Будет создан один вариантвстроенный объект обратного вызова, например:
fun getCurrentEventData() {
ApiClient.syncService().currentEvent().enqueue(object : Callback<CurrentEventResponse> {
override fun onFailure(call: Call<CurrentEventResponse>, t: Throwable) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onResponse(call: Call<CurrentEventResponse>, response: Response<CurrentEventResponse>) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
})
}
Но я бы хотел разделить обработчики событий, поэтому вызывающий метод (getCurrentEventData()
) не растет с логикой для onResponse
и onFailure
events.
Что еще я могу сделать?