gpt4 book ai didi

android - safeUnbox() 不能反转

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:29 25 4
gpt4 key购买 nike

我正在尝试消除我的 Android 应用程序的所有警告,其中之一是:

viewModel.value 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.value with safeUnbox() to prevent the warning

其中值是来自父类(super class)的通用 ObservableField:

public abstract class BaseDataTypeViewModel<T> extends BaseObservable  {
public final ObservableField<T> value = new ObservableField<>();
...
}

并且在某处扩展为 bool 值:

public class CheckBooleanDataTypeViewModel extends BaseDataTypeViewModel<Boolean> {
...
}

我在 data binding - safeUnbox warning 上看到了出现警告是因为这是一个 Boolean 而不是 boolean,所以我尝试添加这个:android:checked="@={safeUnbox(viewModel. value)}" 而不是 android:checked="@={viewModel.value}" 但后来我收到一条错误消息,说我无法反转 safeUnbox() 方法。

****/ data binding error ****msg:The expression android.databinding.DynamicUtil.safeUnbox(viewModelValue) cannot be inverted: There is no inverse for method safeUnbox, you must add an @InverseMethod annotation to the method to indicate which method should be used when using it in two-way binding expressions

我正确理解了这 2 个独立的问题,但我是否必须接受警告以避免错误,或者它们是否是同时避免警告和错误的解决方案?它正在谈论的 @InverseMethod 怎么样?我没有设法添加此注释,因为该方法来自 android 包。

最佳答案

我没有以这种特殊方式使用 Android 架构组件或数据绑定(bind)库,但我认为我仍然可以提供帮助。

在您的 XML 中,您有:

android:checked="@={viewModel.value}"

系统给你一个警告是因为它想让你知道在 viewModel.valuenull 的情况下,它会做一些特别的事情(表现为尽管它可能是 false)。它通过 safeUnbox() 方法执行此操作。

要解决警告,建议显式调用 safeUnbox()。你不能那样做,因为没有 safeUnbox() 的“逆”从 booleanBoolean back>.

但这听起来并不像你必须使用safeUnbox();您可以创建自己的方法将 Boolean 转换为 boolean,然后您可以使用建议的注释来声明哪个方法将从 boolean 转换回来为 bool 值

public class MyConversions {

@InverseMethod("myBox")
public static boolean myUnbox(Boolean b) {
return (b != null) && b.booleanValue();
}

public static Boolean myBox(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
}

现在您可以将 XML 更改为:

android:checked="@={com.example.stackoverflow.MyConversions.myUnbox(viewModel.value)}"

希望对您有所帮助。如果事实证明我偏离了基地,请告诉我;我很想了解有关此主题的更多信息。

我在这个答案中的大部分内容都是从 https://medium.com/google-developers/android-data-binding-inverse-functions-95aab4b11873 中学到的

关于android - safeUnbox() 不能反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47335090/

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