代码之家  ›  专栏  ›  技术社区  ›  Khemraj Sharma

Kotlin&数据绑定Int值空检查问题

  •  -1
  • Khemraj Sharma  · 技术社区  · 7 年前

    所以kotlin&data绑定又让我卡住了。我用代码开始我的问题。

    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}"
        ...
        />
    

    调试跟踪列表

    0 = {ModelBottomItem@6406} "ModelBottomItem(name=2131755043, image=2131230862, gender=0, enabled=true, disabledIconColor=0)"
    
    08-10 12:57:12.388 24902-24902/acr.browser.barebones E/AndroidRuntime: FATAL EXCEPTION: main
        Process: acr.browser.barebones, PID: 24902
        java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
    

    如果我改变 item.gender == null

    然后代码无法生成。它失败了,错误如下。

    error: incomparable types: int and <null>
                    itemGenderJavaLangObjectNull = (itemGender) == (null);
    

    分两行理解问题。

    • item.gender==空 incomparable types: int and <null> .
    • item.gender == 0 ,则代码将崩溃 int java.lang.Integer.intValue()' on a null object reference 如果运行时为0。即使你可以看到调试跟踪,我的模型项是0,不是 **null** . 甚至我也给性别设置了默认值,即 val gender: Int = 0 那么它怎么可能是空的或0呢?
    2 回复  |  直到 7 年前
        1
  •  2
  •   Sasi Kumar    7 年前

    在这种情况下使用 这样地

     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
    

    您的数据模型使用可为空的Int?

     gender: Int? = 0 as parameter
    

    这样地

     data class ModelBottomItem(
        @StringRes val name: Int,
        @DrawableRes val image: Int,
        val gender: Int?= 0,
        val enabled: Boolean = true,
        val disabledIconColor: Int = 0)
    : BaseModel()
    
        2
  •  0
  •   AFLAH ALI    7 年前

    看起来您在活动中没有正确调用ActivityBinding.setItem(您的项)。

    尝试在活动中添加断点以确认没有将空项绑定到布局