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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了改造服务器响应的默认值显示为空。相关的知识,希望对你有一定的参考价值。

我正在调用一个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?"}

答案

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

var answer: Answer = Answer()

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

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

注意:验证语法。

另一答案

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

以上是关于改造服务器响应的默认值显示为空。的主要内容,如果未能解决你的问题,请参考以下文章

在进行改造 2 发布请求时,响应正文为空

如何从片段中的 JSON 响应中的对象获取数据

如果对象在 Java 中为空,则获取默认值

如果值在 Android 中为空或 null,则显示默认文本

当应该为真时,Android Studio 改造响应返回布尔值为假

在目标 c 中使用 jsonModel 映射时将默认值设置为空字段