改造服务器响应的默认值显示为空。
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没有默认值,现在似乎可以用了。这似乎是一个欺骗的解决方案,但它的工作。
以上是关于改造服务器响应的默认值显示为空。的主要内容,如果未能解决你的问题,请参考以下文章
如果值在 Android 中为空或 null,则显示默认文本