Недавно я работал над проектом, который включает в себя работу с API.
Я проверил его в Postman и уверен, что его ответ представляет собой массив объектов, но когда я попытался его использовать, я столкнулся с ожидаемым BEGIN_OBJECT, но был Ошибка BEGIN_ARRAY, поэтому я изменил тип ответа API на «Список», чтобы посмотреть, что произойдет, и понял, что вместо «Массива объектов» он возвращает массивы массивов объектов, и во всех из них объекты имеют значение NULL и не имеют допустимого ответа.
fun createApiService(): ApiService {
val client = OkHttpClient.Builder()
.addInterceptor(
BasicAuthInterceptor(
"username",
"password"
)
)
.build()
val api = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
return api.create(ApiService::class.java)
}
class BasicAuthInterceptor(username: String, password: String) : Interceptor {
private var credentials: String = Credentials.basic(username, password)
override fun intercept(chain: Interceptor.Chain): okhttp3.Response {
var request = chain.request()
request = request.newBuilder().header("Authorization", credentials).build()
return chain.proceed(request)
}
}
Эта часть предназначена для создания API и присвоения ему имени пользователя и пароля, поскольку он является частным и требует
авторизации:
data class ProductResponse(
val products: List
)
data class Product(
/// its attributes are here
)
interface ApiService {
@GET("products")
suspend fun getAllProducts(): List
}
class ProductRepositoryImpl(
private val apiService: ApiService,
) : ProductRepository {
override suspend fun getProducts(isInternetConnected: Boolean): List {
val dataFromServer = apiService.getAllProducts()
Log.v("api",dataFromServer.toString())
return dataFromServer[0].products
}
}
и журнал показывает:
[ProductResponse(products=null), ProductResponse(products=null), ProductResponse( Products = null), ProductResponse (products = null), ProductResponse (products = null), ProductResponse (products = null), ProductResponse (products = null), ProductResponse (products = null), ProductResponse (products = null), ProductResponse (products) =null)]
[{
"name": "test",
"type": "simple",
"featured": false,
"catalog_visibility": "visible",
"description": "",
"short_description": "",
"price": "351000",
"regular_price": "351000",
"sale_price": "",
"on_sale": false,
"purchasable": true,
"total_sales": 0,
"button_text": "",
"tax_status": "taxable",
"tax_class": "",
"manage_stock": false,
"stock_quantity": null,
"backorders": "no",
"backorders_allowed": false,
"backordered": false,
"low_stock_amount": null,
"sold_individually": false,
"weight": "",
"shipping_required": true,
"shipping_taxable": true,
"shipping_class": "",
"shipping_class_id": 0,
"reviews_allowed": true,
"average_rating": "0.00",
"rating_count": 0,
"parent_id": 0,
"purchase_note": "",
and it continues like this and is more than 600 lines
Подробнее здесь: https://stackoverflow.com/questions/784 ... trofit-and
Получение API возвращает массив массивов вместо массива объектов с использованием Retrofit и Gson. ⇐ Android
Форум для тех, кто программирует под Android
1715318065
Anonymous
Недавно я работал над проектом, который включает в себя работу с API.
Я проверил его в Postman и уверен, что его ответ представляет собой массив объектов, но когда я попытался его использовать, я столкнулся с ожидаемым BEGIN_OBJECT, но был Ошибка BEGIN_ARRAY, поэтому я изменил тип ответа API на «Список», чтобы посмотреть, что произойдет, и понял, что вместо «Массива объектов» он возвращает массивы массивов объектов, и во всех из них объекты имеют значение NULL и не имеют допустимого ответа.
fun createApiService(): ApiService {
val client = OkHttpClient.Builder()
.addInterceptor(
BasicAuthInterceptor(
"username",
"password"
)
)
.build()
val api = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
return api.create(ApiService::class.java)
}
class BasicAuthInterceptor(username: String, password: String) : Interceptor {
private var credentials: String = Credentials.basic(username, password)
override fun intercept(chain: Interceptor.Chain): okhttp3.Response {
var request = chain.request()
request = request.newBuilder().header("Authorization", credentials).build()
return chain.proceed(request)
}
}
Эта часть предназначена для создания API и присвоения ему имени пользователя и пароля, поскольку он является частным и требует
авторизации:
data class ProductResponse(
val products: List
)
data class Product(
/// its attributes are here
)
interface ApiService {
@GET("products")
suspend fun getAllProducts(): List
}
class ProductRepositoryImpl(
private val apiService: ApiService,
) : ProductRepository {
override suspend fun getProducts(isInternetConnected: Boolean): List {
val dataFromServer = apiService.getAllProducts()
Log.v("api",dataFromServer.toString())
return dataFromServer[0].products
}
}
и журнал показывает:
[ProductResponse(products=null), ProductResponse(products=null), ProductResponse( Products = null), ProductResponse (products = null), ProductResponse (products = null), ProductResponse (products = null), ProductResponse (products = null), ProductResponse (products = null), ProductResponse (products = null), ProductResponse (products) =null)]
[{
"name": "test",
"type": "simple",
"featured": false,
"catalog_visibility": "visible",
"description": "",
"short_description": "",
"price": "351000",
"regular_price": "351000",
"sale_price": "",
"on_sale": false,
"purchasable": true,
"total_sales": 0,
"button_text": "",
"tax_status": "taxable",
"tax_class": "",
"manage_stock": false,
"stock_quantity": null,
"backorders": "no",
"backorders_allowed": false,
"backordered": false,
"low_stock_amount": null,
"sold_individually": false,
"weight": "",
"shipping_required": true,
"shipping_taxable": true,
"shipping_class": "",
"shipping_class_id": 0,
"reviews_allowed": true,
"average_rating": "0.00",
"rating_count": 0,
"parent_id": 0,
"purchase_note": "",
and it continues like this and is more than 600 lines
Подробнее здесь: [url]https://stackoverflow.com/questions/78450202/fetching-api-returns-array-of-arrays-instead-array-of-objects-using-retrofit-and[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия