改造服务器响应的默认值显示为空。

问题描述 投票:0回答:1

我正在调用一个api,它将给我一些值和一些不值。所以我给了一些变量的默认值。但即使我没有从服务器获取它们,它们在日志中也显示为null,应用程序崩溃。

这里是模型类。

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 = ""
)

如果你看到我已经给了答案一个默认对象(默认初始化),以防服务器不发送它。我的要求是,如果服务器发送了它,我就应该拥有它,如果没有,那么我就应该能够写出那个答案对象。但是,当我试图访问那个答案对象时,我得到了null pointer异常。

以下是日志

 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?"}

android kotlin nullpointerexception retrofit2
1个回答
0
投票

根据你所显示的代码,你是在初始化

var answer: Answer = Answer()

但是由于服务器返回的是null,所以它将默认的Answer替换为null值。一个可能的解决方法是提供getter方法,类似于这样的行文

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

注意:验证语法。


0
投票

所以现在我已经给上面的所有字段赋值,也给id赋值,因为id没有默认值,现在似乎可以用了。这似乎是一个欺骗的解决方案,但它的工作。

© www.soinside.com 2019 - 2024. All rights reserved.