Java 科特林公司;数据绑定Int值空检查问题 这是我遇到过的最奇怪的问题。
所以kotlin和数据绑定再次让我陷入困境。我从代码开始提问 模型类Java 科特林公司;数据绑定Int值空检查问题 这是我遇到过的最奇怪的问题。,java,android,kotlin,android-databinding,Java,Android,Kotlin,Android Databinding,所以kotlin和数据绑定再次让我陷入困境。我从代码开始提问 模型类 data class ModelBottomItem( @StringRes val name: Int, @DrawableRes val image: Int, val gender: Int = 0, val enabled: Boolean = true, val disabledIconColor: Int = 0) : Base
data class ModelBottomItem(
@StringRes val name: Int,
@DrawableRes val image: Int,
val gender: Int = 0,
val enabled: Boolean = true,
val disabledIconColor: Int = 0)
: BaseModel()
布局代码
<variable
name="item"
type="myModel"/>
<TextView
android:text="@{item.gender == 0 ? @string/male : @string/female}"
...
/>
废话,废话
如果我更改item.gender==null
那么代码就无法构建。它失败了,错误如下。
错误:不可比较的类型:int和
itemGenderJavaLangObjectNull=(itemGender)==(null);
从两方面理解问题。
- 当我选中item.gender==null时,显示错误
不可比较的类型:int和
- 当我检查
时,如果在运行时为0,则在空对象引用上的代码将崩溃,并说item.gender==0
int java.lang.Integer.intValue()。即使您可以看到调试跟踪,我的模型项也是0,它不是
。甚至我也将默认值设置为gender,即**null**
那么它怎么可能是null或0?val-gender:Int=0
item.gender.toString().toIntOrNull()
范例
val numb=""
val numb2="7"
val print1=numb.toIntOrNull()
println(print1) //out put is null
val print2=numb2.toIntOrNull()
println(print2) // output is 7
您的数据模型是否使用nullable Int
gender: Int? = 0 as parameter
像这样
item.gender.toString().toIntOrNull()
data class ModelBottomItem(
@StringRes val name: Int,
@DrawableRes val image: Int,
val gender: Int?= 0,
val enabled: Boolean = true,
val disabledIconColor: Int = 0)
: BaseModel()
在这种情况下,请像这样使用toIntOrNull()
item.gender.toString().toIntOrNull()
范例
val numb=""
val numb2="7"
val print1=numb.toIntOrNull()
println(print1) //out put is null
val print2=numb2.toIntOrNull()
println(print2) // output is 7
您的数据模型是否使用nullable Int
gender: Int? = 0 as parameter
像这样
item.gender.toString().toIntOrNull()
data class ModelBottomItem(
@StringRes val name: Int,
@DrawableRes val image: Int,
val gender: Int?= 0,
val enabled: Boolean = true,
val disabledIconColor: Int = 0)
: BaseModel()
看起来您尚未在活动中正确调用ActivityBinding.setItem(您的_项)
尝试在活动中添加断点,以确认您没有将空项绑定到布局看起来您没有在活动中正确调用ActivityBinding.setItem(您的_项) 尝试在活动中添加断点,以确认未将空项绑定到布局此操作也有效:
android:someBinding="@{(Integer) null}"
这也有效:
android:someBinding="@{(Integer) null}"
stacktrace/错误是否提供了行号/属性名称?它可能是关于其他领域(不是性别)的吗?是的,我已经完全检查过了。它给我行号。stacktrace/错误是否给你行号/属性名?它可能是关于其他领域(不是性别)的吗?是的,我已经完全检查过了。它给了我电话号码。你试过这个吗<代码>***/数据绑定错误****消息:在类int中找不到方法toIntOrNull()使用item.gender.toString().toIntOrNull()***/数据绑定错误****消息:在类intAlready发布的相关代码中找不到方法toString()。您可以尝试用这个创建一个示例代码。如果我采用java模型,就不会有问题,所有问题都是kotlin数据类的问题。您尝试过这个吗<代码>***/数据绑定错误****消息:在类int中找不到方法toIntOrNull()使用item.gender.toString().toIntOrNull()***/数据绑定错误****消息:在类intAlready发布的相关代码中找不到方法toString()。您可以尝试用这个创建一个示例代码。如果我采用java模型,就不会有问题,所有问题都是kotlin数据类的问题。我已经添加了调试跟踪,这是我从调试中获得的。顺便说一下,它不是一个活动。我已经添加了调试跟踪,这是我从调试中获得的。顺便说一下,它不是一个活动。