gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:51 28 4
gpt4 key购买 nike

我是 Android 数据绑定(bind)库的新手。

我有一堆警告,例如:

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

定义如下:

在 View 模型中

val someBoolean: MutableLiveData<Boolean> = MutableLiveData()

在布局中

<RadioButton
android:id="@+id/someBooleanRadioButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="@={viewModel.someBoolean}"
android:text="@string/boolean_description" />

我尝试通过添加 safeUnbox() 来修复它:

<RadioButton
android:id="@+id/someBooleanRadioButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="@={safeUnbox(viewModel.someBoolean)}"
android:text="@string/boolean_description" />

但是我遇到了编译错误:

msg:cannot find method safeUnbox(java.lang.Boolean) in class android.databinding.ViewDataBinding

在gradle中已经定义好了

dataBinding {
enabled = true
}

kapt 'com.android.databinding:compiler:3.1.4'

任何想法如何解决它?安卓工作室 3.1.4 Gradle 4.4 Kotlin 1.2.61

附言刚刚有重复的问题。所有的问题都是关于如何修复警告,但我的问题是如何在添加 safeUnbox()

时修复编译错误

最佳答案

我说的是 bool 值,这个解决方案对于 Integer、Double、Character 等都是一样的。

当你有双向绑定(bind)时,你不能使用safeUnbox()方式,因为safeUnbox() will not be inverted .

<variable
name="enabled"
type="Boolean"/>

....

<Switch
android:checked="@={enabled}"
/>

解决方案一

Boolean 更改为原始类型 boolean。这样它就永远不会为空,default value boolean 的值为 false。

<variable
name="enabled"
type="boolean"/>

方案二

很长的路要走safeBoxsafeUnbox 方法。 See here .

什么是 safeUnbox() 方法?

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

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;
}

关于android - 在类 android.databinding.ViewDataBinding 中找不到方法 safeUnbox(java.lang.Boolean),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52251127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com