Примечание: новичок здесь, пожалуйста, дайте мне знать, если мне нужно будет предоставить больше информации или уточнить что-либо.
Чтобы дать вам некоторый контекст: я практикую создание приложения-клона Messenger с большим количеством методов Retrofit,Для этой цели я использую небольшой локальный сервер JSON, с которым связывается приложение.
Когда пользователь приложения создает учетную запись, приложение создает объект профиля на сервере JSON, используя следующий метод:
@FormUrlEncoded
@POST("profiles")
suspend fun createProfile(@Field("username") username: String?,
@Field("picture") picture: String?,
@Field(value = "nickname") nickname: String?,
@Field(value = "contacts") contacts: ArrayList<String?>,
@Field(value = "status") status: Int?): Response<Profile>
Изначально ArrayList контактов пуст, поскольку пользователь еще не добавил ни одного контакта.Создание случайного профиля с пустым ArrayList () для параметра контактов, это результат на сервере JSON:
{
"username": "username.example",
"picture": "picture's URL",
"nickname": "Nikola",
"status": 1,
"id": 4
}
Класс, представляющий модель профиля внутри приложения, выглядит так:
class Profile(
val username: String? = "",
var picture: String? = "",
var nickname: String? = "",
var contacts: ArrayList<String?>? = ArrayList(),
var status: Int? = 1,
val id: Int? = 0
)
После создания профиля, естественно, пользователь может добавлять новые контакты, что происходит с помощью следующего метода:
@FormUrlEncoded
@PATCH("profiles/{id}")
suspend fun addContact(@Path("id") id: Int?,
@Field("contacts") contacts: ArrayList<String?>?): Response<Profile>
И вот где возникает проблема, при самом первом добавленном контакте.ArrayList, который отправляется на сервер, содержит только один элемент, и результат на сервере JSON выглядит следующим образом:
{
"username": "username.example",
"picture": "picture's URL",
"nickname": "Nikola",
"status": 1,
"id": 4,
"contacts": "first.contact"
}
По сути, поскольку массив содержит только один элемент, он сохраняет его как строку.Это создает всевозможные проблемы позже, потому что, как только приложение использует метод @GET для этого профиля, оно ожидает ArrayList для атрибута контактов, но получает строку.
Что я могу сделать, чтобы сделатьпрофиль JSON выглядит следующим образом:
{
"username": "username.example",
"picture": "picture's URL",
"nickname": "Nikola",
"status": 1,
"id": 4,
"contacts": ["first.contact"]
}
Параметр contacts должен быть массивом, даже если в нем есть только один элемент.