在类android.databinding.ViewDataBinding中找不到方法safeUnbox(java.lang.Boolean)

在类android.databinding.ViewDataBinding中找不到方法safeUnbox(java.lang.Boolean),android,android-databinding,Android,Android Databinding,我是Android数据绑定库的新手 我有很多警告,比如: warning: viewModel.someBoolean.getValue() is a boxed field but needs to be un-boxed to execute android:checked. This may cause NPE so Data Binding will safely unbox it. You can change the expression and explicitly wrap vi

我是Android数据绑定库的新手

我有很多警告,比如:

warning: viewModel.someBoolean.getValue() is a boxed field but needs to be un-boxed to execute android:checked. This may cause NPE so Data Binding will safely unbox it. You can change the expression and explicitly wrap viewModel.someBoolean.getValue() with safeUnbox() to prevent the warning
它的定义如下:

在视图模型中

val someBoolean: MutableLiveData<Boolean> = MutableLiveData()
在gradle中已经定义了

dataBinding {
        enabled = true
    }
kapt'com.android.databinding:compiler:3.1.4'

你有没有想过如何修复它? Android Studio 3.1.4 格拉德尔4.4 科特林1.2.61

p.S.刚刚收到了问题的副本。所有的问题都是关于如何修复警告,但我的问题是如何修复添加
safeUnbox()

时的编译错误。我讲的是布尔值,这个解决方案对于整数、双精度、字符等都是一样的。 如果有双向绑定,则不能使用
safeUnbox()
way,因为

解决方案2

还有很长的一段路要走,那就是为safeBoxsafeUnbox方法制定方法

什么是safeUnbox()方法?
safeUnbox()
只需检查空值并返回非空值。您可以看到以下在数据绑定库中定义的方法

public static int safeUnbox(java.lang.Integer boxed) {
    return boxed == null ? 0 : (int)boxed;
}
public static long safeUnbox(java.lang.Long boxed) {
    return boxed == null ? 0L : (long)boxed;
}
public static short safeUnbox(java.lang.Short boxed) {
    return boxed == null ? 0 : (short)boxed;
}
public static byte safeUnbox(java.lang.Byte boxed) {
    return boxed == null ? 0 : (byte)boxed;
}
public static char safeUnbox(java.lang.Character boxed) {
    return boxed == null ? '\u0000' : (char)boxed;
}
public static double safeUnbox(java.lang.Double boxed) {
    return boxed == null ? 0.0 : (double)boxed;
}
public static float safeUnbox(java.lang.Float boxed) {
    return boxed == null ? 0f : (float)boxed;
}
public static boolean safeUnbox(java.lang.Boolean boxed) {
    return boxed == null ? false : (boolean)boxed;
}

尝试删除app目录下的build文件夹:
app/build

在从应用程序的某些代码部分删除数据绑定后,我遇到了这个错误。看起来缓存中仍然存在以前代码生成的某些绑定


@nilesh rathod我想不是duplicate@NileshRathod这个问题是关于如何修复“表达式android.databinding.DynamicUtil.safeUnbox(viewModelValue)不能反转”,但我的问题是关于如何修复“msg:not find method safeUnbox(java.lang.Boolean)在类android.databinding.ViewDataBinding”。我觉得这有点不同,不是吗?我也认为这不是复制品。
msg:cannot find method safeUnbox(java.lang.Boolean) in class android.databinding.ViewDataBinding
dataBinding {
        enabled = true
    }
<variable
    name="enabled"
    type="Boolean"/>

....

<Switch
    android:checked="@={enabled}"
    />
<variable
    name="enabled"
    type="boolean"/>
public static int safeUnbox(java.lang.Integer boxed) {
    return boxed == null ? 0 : (int)boxed;
}
public static long safeUnbox(java.lang.Long boxed) {
    return boxed == null ? 0L : (long)boxed;
}
public static short safeUnbox(java.lang.Short boxed) {
    return boxed == null ? 0 : (short)boxed;
}
public static byte safeUnbox(java.lang.Byte boxed) {
    return boxed == null ? 0 : (byte)boxed;
}
public static char safeUnbox(java.lang.Character boxed) {
    return boxed == null ? '\u0000' : (char)boxed;
}
public static double safeUnbox(java.lang.Double boxed) {
    return boxed == null ? 0.0 : (double)boxed;
}
public static float safeUnbox(java.lang.Float boxed) {
    return boxed == null ? 0f : (float)boxed;
}
public static boolean safeUnbox(java.lang.Boolean boxed) {
    return boxed == null ? false : (boolean)boxed;
}