Ошибка: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 14 path
учусь пользоваться retrofit, тренируюсь на API vk.com, получаю вот такую ошибку:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 14 path $.response
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$ ...blablablabla
Не могу найти где проблема, кто-нибудь сможет подсказать где ошибка и как пофисксить? Буду благодарен.
Code in VkPagingSource:
class VkPagingSource(
private val vkApi: VkApi,
private val userId: String
) : PagingSource<Int, VkPerson>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, VkPerson> {
val position = params.key ?: VK_STARTING_PAGE_INDEX
return try {
val vkResponse = vkApi.searchFriends(userId, "500", "city,domain,photo_100", VkApi.API_VERSION, VkApi.ACCESS_TOKEN)
val people = vkResponse.response
LoadResult.Page(
data = people,
prevKey = if (position == VK_STARTING_PAGE_INDEX) null else position - 1,
nextKey = if (people.isEmpty()) null else position + 1
)
} catch (exception: IOException) {
LoadResult.Error(exception)
} catch (exception: HttpException) {
LoadResult.Error(exception)
}
}
}
in ViewModel:
@HiltViewModel
class PeopleViewModel @Inject constructor(
private val repository: VkRepository
) : ViewModel() {
private val currentUserId = MutableLiveData(DEFAULT_USER_ID)
val people = currentUserId.switchMap { userIdInt ->
repository.getUserFriendsResults(userIdInt).cachedIn(viewModelScope)
}
fun getUserFriends(userId: Int) {
currentUserId.value = userId
}
companion object {
private const val DEFAULT_USER_ID = 100082006
}
}
in Repo:
@Singleton
class VkRepository @Inject constructor(private val vkApi: VkApi) {
fun getUserFriendsResults(userId: Int) =
Pager(
config = PagingConfig(
pageSize = 20,
maxSize = 100,
enablePlaceholders = false
),
pagingSourceFactory = { VkPagingSource(vkApi, userId) }
).liveData
}
VkResponse object:
data class VkResponse(
val results: List<VkPerson>
)
VkApi:
interface VkApi {
companion object {
const val BASE_URL = "https://api.vk.com/"
const val ACCESS_TOKEN = space.rodionov.vkontaktefucker.BuildConfig.VK_ACCESS_TOKEN
const val API_VERSION = "5.21"
}
@GET("method/friends.get")
suspend fun searchFriends(
@Query("user_id") id: String,
@Query("count") count: String,
@Query("fields") fields: String,
@Query("v") apiVersion: String,
@Query("access_token") accessToken: String
) : VkResponse
}
VkPerson:
@Parcelize
data class VkPerson(
val id: Int,
@SerializedName("first_name")
val firstName: String,
@SerializedName("last_name")
val lastName: String,
@SerializedName("photo_100")
val photo: String,
val domain: String,
val city: VkCity
) : Parcelable {
@Parcelize
data class VkCity(
@SerializedName("title")
val cityName: String
) : Parcelable
}