Есть ли способ вернуть значения по умолчанию в Kotlin Класс данных при использовании Moshi, когда API возвращает нулевые значения через JSON - PullRequest
1 голос
/ 17 января 2020

Когда JSON данные приходят в ноль, тогда я хочу, это должно принять значение по умолчанию, и мне не нужно всегда проверять ноль в конвертере Моши.

Я использую Moshi-kotlin также, но все же result одинаковы.

{ 
        "image": null,
        "visible": null
        "name": null,
        "description": null
        "id": null,
        "subcategories": null
        "ordinal": null,
        "isEvent": null,
        "style": null
}

Вот мой Data class, где я храню его default value.

Data Class

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Сделайте записи класса данных ненулевыми (удалите?)

Затем поместите в каждое место, где вы вызываете конструктор, ?: "". Все, что имеет значение null, будет изменено на пустую строку

В качестве альтернативы, вы можете создать метод .invoke (...) для объекта-компаньона и использовать его для обработки значений.

1 голос
/ 17 января 2020

Рассмотрите возможность определения двух классов моделей:

  • , который точно соответствует тому, что предоставил ваш сервер (все равно нулю), и
  • , который представляет, как работает ваше приложение (вещи не являются -null)

Вы можете воспользоваться примером Event Json из файла readme для Moshi, чтобы довольно легко конвертировать их при декодировании объекта сервера.

class EventJsonAdapter {
  @FromJson Event eventFromJson(EventJson eventJson) {
    Event event = new Event();
    event.title = eventJson.title;
    event.beginDateAndTime = eventJson.begin_date + " " + eventJson.begin_time;
    return event;
  }

  @ToJson EventJson eventToJson(Event event) {
    EventJson json = new EventJson();
    json.title = event.title;
    json.begin_date = event.beginDateAndTime.substring(0, 8);
    json.begin_time = event.beginDateAndTime.substring(9, 14);
    return json;
  }
}

Попытка использовать один и тот же объект для бизнес-логики c и JSON неудобна. Наличие разных объектов для каждого - это простой способ избежать этого. Кроме того, вы можете обдумать, что происходит при отправке этих значений по умолчанию обратно на сервер.

...