Значения по умолчанию из ответа Retrofit Server отображаются как нулевые - PullRequest
0 голосов
/ 22 апреля 2020

Я звоню в API, который даст мне некоторые значения, а некоторые нет. Итак, я дал значения некоторых переменных по умолчанию. Но даже когда я не получаю их с сервера, они отображаются как нулевые в журнале, и приложение падает.

Вот класс модели:

data class FeedbackData(

    var questionNumber: Int = 0,
    var imageUri: Uri? = null,

    @SerializedName("id") val id: Int,
    @SerializedName("question") val question: String? = null,
    @SerializedName("answer") var answer: Answer = Answer()

)

data class Answer(

    @SerializedName("description") var description: String = "",
    @SerializedName("image") var image: String = ""
)

, если вы видите, что я дал ответ, объект по умолчанию (инициализация по умолчанию), если сервер не отправляет его. Мое требование заключается в том, что если сервер отправляет его, я должен иметь его, если нет, то я должен быть в состоянии написать этот объект ответа. Но я получаю исключение нулевого указателя при попытке получить доступ к этому объекту ответа.

Вот журнал

 E/xoxo: received list: [FeedbackData(questionNumber=0, imageUri=null, id=1, question=How was the event?, answer=null), FeedbackData(questionNumber=0, imageUri=null, id=2, question=Did you face any issue?, answer=null)

А вот ответ сервера:

{"id":1,"question":"How was the event?"},
{"id":2,"question":"Did you face any issue?"}

Ответы [ 2 ]

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

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

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

Исходя из кода, который вы показали, вы инициализируете

var answer: Answer = Answer()

Но так как сервер возвращает ноль, он заменяет ответ по умолчанию нулевым значением. Одним из возможных решений может быть предоставление метода получения, что-то в этих строках

var name: answer : Answer
        get() = field?:Answer()

Примечание. Проверьте синтаксис.

...