Я звоню в своем приложении Unsplash API .Я хочу получить фотографии на основе ключевого слова.
Но я не могу что-то не так в моей модели или URL , и я получаю эту ошибку:
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
Я использую Библиотека подкачки с LiveData для этого, но я не знаю, как это сделать правильно.
Вот мой PhotoDataSource:
override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, Photo>) {
networkState.postValue(NetworkState.LOADING)
initialLoad.postValue(NetworkState.LOADING)
photoService.search("nature", FIRST_PAGE_NUMBER, params.requestedLoadSize).enqueue(object : Callback<List<Photo>>{
override fun onFailure(call: Call<List<Photo>>, t: Throwable) {
// keep a Completable for future retry
setRetry(Action { loadInitial(params, callback) })
val error = NetworkState.error(t.message)
// publish the error
networkState.postValue(error)
initialLoad.postValue(error)
}
override fun onResponse(call: Call<List<Photo>>, response: Response<List<Photo>>) {
if (response.body() != null) {
setRetry(null)
val data = response.body()
val items = data?.map { it } ?: emptyList()
networkState.postValue(NetworkState.LOADED)
initialLoad.postValue(NetworkState.LOADED)
callback.onResult(items, null, FIRST_PAGE_NUMBER + INCREMENT_PAGE_VALUE)
}
}
})
}
override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, Photo>) {
networkState.postValue(NetworkState.LOADING)
Timber.d("Fetching next page: ${params.key}")
photoService.search("nature", params.key, params.requestedLoadSize).enqueue(object : Callback<List<Photo>> {
override fun onFailure(call: Call<List<Photo>>, t: Throwable) {
// keep a Completable for future retry
setRetry(Action { loadAfter(params, callback) })
// publish the error
networkState.postValue(NetworkState.error(t.message))
}
override fun onResponse(call: Call<List<Photo>>, response: Response<List<Photo>>) {
if (response.body() != null) {
val data = response.body()
val items = data?.map { it } ?: emptyList()
setRetry(null)
networkState.postValue(NetworkState.LOADED)
callback.onResult(items, params.key + INCREMENT_PAGE_VALUE)
}
}
})
}
Здесь у меня есть фотообъект:
@Parcelize
data class Photo (val urls: @RawValue Urls? = null,
val color: String? = null,
val width: Int? = null,
val height: Int? = null,
val created_at: String? = null,
val id: String? = null,
val user: @RawValue User? = null,
val links: @RawValue Links? = null,
val likes: Int? = null,
val downloads: Int? = null,
val description: String? = null,
val location: @RawValue Location? = null,
val exif: @RawValue Exif? = null
):Parcelable
И вот я вызываю API, PhotoService:
@GET("search/photos")
fun search(@Query("query") query: String, @Query("per_page") perPage: Int, @Query("page") page: Int): Call<List<Photo>>
Вот полный код из JSON Response:
{
"total": 133,
"total_pages": 7,
"results": [
{
"id": "eOLpJytrbsQ",
"created_at": "2014-11-18T14:35:36-05:00",
"width": 4000,
"height": 3000,
"color": "#A7A2A1",
"likes": 286,
"liked_by_user": false,
"description": "A man drinking a coffee.",
"user": {
"id": "Ul0QVz12Goo",
"username": "ugmonk",
"name": "Jeff Sheldon",
"first_name": "Jeff",
"last_name": "Sheldon",
"instagram_username": "instantgrammer",
"twitter_username": "ugmonk",
"portfolio_url": "http://ugmonk.com/",
"profile_image": {
"small": "https://images.unsplash.com/profile-1441298803695-accd94000cac?ixlib=rb-0.3.5&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32&s=7cfe3b93750cb0c93e2f7caec08b5a41",
"medium": "https://images.unsplash.com/profile-1441298803695-accd94000cac?ixlib=rb-0.3.5&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64&s=5a9dc749c43ce5bd60870b129a40902f",
"large": "https://images.unsplash.com/profile-1441298803695-accd94000cac?ixlib=rb-0.3.5&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128&s=32085a077889586df88bfbe406692202"
},
"links": {
"self": "https://api.unsplash.com/users/ugmonk",
"html": "http://unsplash.com/@ugmonk",
"photos": "https://api.unsplash.com/users/ugmonk/photos",
"likes": "https://api.unsplash.com/users/ugmonk/likes"
}
},
"current_user_collections": [],
"urls": {
"raw": "https://images.unsplash.com/photo-1416339306562-f3d12fefd36f",
"full": "https://hd.unsplash.com/photo-1416339306562-f3d12fefd36f",
"regular": "https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=92f3e02f63678acc8416d044e189f515",
"small": "https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&s=263af33585f9d32af39d165b000845eb",
"thumb": "https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&s=8aae34cf35df31a592f0bef16e6342ef"
},
"links": {
"self": "https://api.unsplash.com/photos/eOLpJytrbsQ",
"html": "http://unsplash.com/photos/eOLpJytrbsQ",
"download": "http://unsplash.com/photos/eOLpJytrbsQ/download"
}
},
// more photos ...
]
}
Понятия не имею, что делать, я видел много уроков в интернете, но не могничего не делатьЯ надеюсь, вы могли бы помочь мне, пожалуйста.