我有api响应的数据类,如下所示
data class ApiResponse(
@SerializedName("ErrorCode") @Expose
var errorCode: Int = 0,
@SerializedName("Message")
@Expose
var message: String? = null,
@SerializedName("Token")
@Expose
var token: String? = null,
@SerializedName("UserId")
@Expose
var userId: String? = null,
@SerializedName("DOB")
@Expose
var birthdate: String? = null,
@SerializedName("Mobile")
@Expose
var mobile: String? = null,
@SerializedName("Data")
@Expose
var dataList: MutableList<Data?>? = null
)我的api调用
val request = ApiServiceBuilder.buildService(NetworkCall::class.java)
request.login(apiPost = ApiPost("long","hello")).enqueue(object :Callback<ApiResponse>{
override fun onResponse(call: Call<ApiResponse>, response: Response<ApiResponse>) {
Log.e("resopne",response.body().userId)
}
override fun onFailure(call: Call<ApiResponse>, t: Throwable) {
t.printStackTrace()
Log.e("resopne","error")
}
})当我试着得到userId的时候
仅允许对可空的安全或非空断言调用。
发布于 2020-05-31 06:13:53
您已经将模型类中的userId定义为optional or nullable,方法是在类型的前面放置一个?。
@SerializedName("UserId")
@Expose
var userId: String? = null因此,当从response.body()读取值时,它告诉您,response.body()中的值userId可能为空,并将在运行时抛出null-pointer exception。因此,为了保护它,它给了你两个选择:
1) Only safe userId? -> --这意味着如果值为null,那么它将不会继续执行该特定行。
2) Non-null asserted userId!! ->意味着您要告诉编译器它永远不会是空的,并且您保证如果这个值得到空,那么它将抛出一个运行时null-pointer exception。
因此,最佳实践是将?用于Only Safe,并以这种方式使用它,因为如果它始终是not-null,则不会产生任何影响。
https://stackoverflow.com/questions/62112124
复制相似问题