Как получить список новостей при помощи VK SDK?
В моём приложении три фрагмента - в одном загружается список друзей, во втором список сообществ, в третьем - список новостей. Проблема возникла, когда начал работать с получением новостей.
С группами всё просто: в метод success передаётся result: GroupsGetObjectExtendedResponse, в котором есть val items: List<GroupsGroupFull>. У класса GroupsGroupFull есть все необходимые поля, характеризующие группу. Мы проходимся по списку, присваиваем поля экземпляров GroupsGroupFull нашему классу VKGroup, а потом выводим всё в RecyclerView:
private fun requestGroups() {
VK.execute(GroupsService().groupsGetExtended(), object :
VKApiCallback<GroupsGetObjectExtendedResponse> {
override fun success(result: GroupsGetObjectExtendedResponse) {
val groups = result.items
if (!requireActivity().isFinishing && groups.isNotEmpty()) {
val vkGroups = groups.map { group ->
VKGroup(
id = group.id.value,
name = group.name ?: "",
photo = group.photo200 ?: ""
)
}
showGroups(vkGroups)
}
}
override fun fail(error: Exception) {
Log.e(TAG, error.toString())
}
})
}
С новостями всё сложнее: в метод success передаётся result: NewsfeedGetResponse, в котором тоже есть val items: List<NewsfeedNewsfeedItem>. Однако класс NewsfeedNewsfeedItem в отличие от класса группы представляет собой sealed class, в котором вложены многочисленные наследники:
Соответственно, никаких полей у самой группы NewsfeedNewsfeedItem нет. Есть только поля наследников - получается, в news.map надо через when перечислять десятки наследников и для каждого типа новости обрабатывать отдельно? Или может новости вообще по-другому получать проще?
Код получения списка новостей:
private fun requestNews() {
VK.execute(NewsfeedService().newsfeedGet(), object :
VKApiCallback<NewsfeedGetResponse> {
override fun success(result: NewsfeedGetResponse) {
Log.d(TAG, "success news")
val news = result.items
if (!requireActivity().isFinishing && news?.isNotEmpty() == true) {
val vkNews = news.map { newsItem ->
VKNews(
text = newsItem.toString()
)
}
showGroups(vkNews)
}
}
override fun fail(error: Exception) {
Log.e(TAG, error.toString())
}
})
}