Невозможно получить данные из JSON API в Kotlin - PullRequest
0 голосов
/ 14 апреля 2020

Я должен использовать Kotlin для проекта. Допустим, у меня есть объект под названием Note. Я сделал файл следующим образом:

@Parcelize 
data class Notes (
val notes: List<Note>
): Parcelable

@Parcelize 
data class Note (
val id: Int,
val text: String
): Parcelable

Я заметил, что если возвращаемое значение JSON имеет следующую структуру, я также добавляю @SerializedName ("all_notes")

{
"all_notes": [
    {
       "id": 1,
       "text": "Some text"
    },

это работает, но если возвращаемое JSON структурировано так, и я удаляю нотацию @SerializedName

[
  {
    "id": 1,
    "text": "Some text"
  },

, я не могу получить данные.

Я думаю, мне нужно как-то использовать сериализованное имя, но я не уверен, как. Мне нужно использовать второй тип файла JSON. Кто-нибудь может помочь?

Редактировать: Кто-то дал идею опубликовать полученную ошибку, поэтому вот она

Ошибка, которую я получаю сейчас,

Ошибка: java .lang.IllegalStateException: ожидалось BEGIN_OBJECT, но было BEGIN_ARRAY в строке 1 пути 2 столбца $

Как я уже говорил, это работает, когда я использую другой файл JSON. Это также работает нормально, если я ставлю в очередь только один объект из API и говорю, что Notes - это просто переменные из Note. Я не получаю ошибки, и я бы распечатал одну записку.

1 Ответ

0 голосов
/ 14 апреля 2020

Я не вижу проблем ни с вашими data классами, ни с вашими json. за исключением того, что вам не нужен первый data класс. Вы можете сопоставить свой json напрямую, используя второй класс, так как ваш json не будет отвечать списком.

Это может помочь вам. Используйте этот веб-сайт , чтобы создать kotlin класс данных для ваших json ответов.

Вам не нужно использовать аннотацию SerializedName, если только у полей класса data нет имен, отличных от атрибутов json, потому что это просто перехватчик карт, используемый Gson при отображении json в ваш экземпляр класса.

Пожалуйста, уточните вашу проблему больше, если вышеперечисленное не помогло вам, мы должны знать, в чем именно ваша проблема, или stacktrace, если у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...