safeUnbox() 无法反转

2023-12-09

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

viewModel.value 是一个装箱字段,但需要取消装箱才能执行 android:checked。这可能会导致 NPE,因此数据绑定将安全地拆箱它。您可以更改表达式并使用 safeUnbox() 显式包装 viewModel.value 以防止出现警告

其中 value 是通用的ObservableField来自超类:

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

并在某处扩展为Boolean:

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

我看到了数据绑定 - safeUnbox 警告发生警告是因为这是Boolean而不是一个boolean,所以我尝试添加这个:android:checked="@={safeUnbox(viewModel.value)}"代替android:checked="@={viewModel.value}"但后来我收到一个错误,说我无法反转safeUnbox() method.

****/ 数据绑定错误 ****msg:表达式 android.databinding.DynamicUtil.safeUnbox(viewModelValue) 无法反转:方法 safeUnbox 没有反转,必须在方法上添加 @InverseMethod 注解来指示在双向绑定表达式中使用时应使用哪种方法

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


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

在您的 XML 中,您有以下内容:

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

系统向您发出警告是因为它希望您知道,在以下情况下viewModel.value is null,它将做一些特别的事情(表现得好像它是false相反,大概)。它通过safeUnbox() method.

为了解决这个警告,它建议safeUnbox()调用显式。你不能这样做,因为没有“逆”safeUnbox() to go back from boolean to Boolean.

但听起来你不必使用safeUnbox();您可以创建自己的转换方法Boolean to boolean,然后您可以使用建议的注释来声明哪个方法将从boolean to Boolean.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

safeUnbox() 无法反转 的相关文章

  • 如何清除所有WebView存储的信息?

    我有一个 Android 浏览器 我可以选择清除缓存 存储 cookie 等 代码如下所示 webView clearCache true webView clearFormData webView clearHistory webView
  • Android Studio 3.0 Canary 9 - 无法解析包

    我在 Android Studio 3 0 Canary 9 中遇到几个错误 这些错误是 无法解析 android 软件包 下面列出了一些错误 我刚刚安装了 SDK 的所有额外软件包 但仍然收到 gradle 构建错误 Error 82 1
  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • 找不到处理意图 com.instagram.share.ADD_TO_STORY 的活动

    在我们的 React Native 应用程序中 我们试图让用户根据视图 组件中的选择直接将特定图像共享到提要或故事 当我们尝试直接使用 com instagram share ADD TO FEED 进行共享时 它以一致的方式完美运行 但是
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 我想实现下面的布局,按钮应该在屏幕底部,当惰性列被填充时,按钮不应该出去

    顶部有惰性列 惰性列下方有输入电话号码布局并从电话簿布局添加联系人 我希望当未添加联系人时此布局位于顶部 当我添加大量联系人时输入电话号码并添加电话簿布局中的联系人会随着惰性列滚动并移出屏幕 我不让他们走出屏幕 当接触较多时 它们必须粘在底
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 一次显示两条Toast消息?

    我希望在一个位置显示一条 Toast 消息 并在另一位置同时显示另一条 Toast 消息 多个 Toast 消息似乎总是按顺序排队和显示 是否可以同时显示两条消息 是否有一种解决方法至少可以提供这种外观并且不涉及扰乱活动布局 Edit 看来
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef

随机推荐

  • 使用 Linq 表达式和反射获取属性值的通用方法

    亲爱的反思之神 我想要一个通用的GetValue
  • 正则表达式 match() 无法捕获 python 中的简单模式

    我正在尝试在 Python 中使用一些简单的正则表达式函数 我正在使用正则表达式来捕获阿拉伯字母表中的模式 但在最简单的情况下 当人们在模式的开头添加几个字母时 无论是否有连字 它似乎都不起作用 gt gt gt p re compile
  • 等待几秒钟而不阻止 UI 执行

    我想在两条指令之间等待几秒钟 但不阻止执行 例如 Thread Sleep 2000 这不好 因为它会阻塞执行 我的想法是 我调用一个方法 然后等待 X 秒 例如 20 秒 监听即将到来的事件 在 20 秒结束时 我应该根据 20 秒内发生
  • C#.NET 使用 Windows 服务获取计算机的用户名

    我很难获取使用 Windows 服务登录计算机的人的用户名 当同时使用 System Environment UserName 或 WindowsIdentity GetCurrent UserName 时 我得到 NTAUTHORITY
  • 了解Android 6权限方法

    我试图从图库中获取图像并将其设置为图像视图 但在 Android 6 中存在一些权限问题 以下是请求许可的方法 我应该要求读取外部存储还是写入外部存储 这是我到目前为止所做的 private static final int READ CO
  • 如何使用 tastypie 登录 django

    我试图在自定义身份验证中覆盖 is authenticated 我有一些简单的事情 首先 是这样的 class MyAuthentication BasicAuthentication def init self args kwargs s
  • md-icons 如何在浏览器上呈现

    我在我的项目中使用了material2和Material图标 我想知道这些命名图标是如何在浏览器中呈现的 我用过
  • 电子重建内发生未处理的错误

    我正在尝试使用 Sqlite3 重建我的 ElectronJS 应用程序 我已经安装了 Python VS 开发工具 但它仍然给我错误 我的 Package json name hello version 1 0 0 description
  • django中如何区分首次注册用户和常规登录用户

    我所有的工作都使用 django allauthsignin signup and logout功能和工作正常 现在我有一个功能 1 当用户第一次注册并登录时 我需要将他重定向到成功页面 验证页面 success 2 当已经注册的用户登录时
  • 使用 boost::spirit 以任意顺序解析命名参数

    我正在为一种输入文件编写一个解析器 输入文件看起来像 CalculationBlock CalculationTitle Test Parser Input System MatchingRadius 25 0 StepSize 0 01
  • 如何使用 solc 0.5 编译 Solidity

    编译 js const path require path const solc require solc const fs require fs extra const buildPath path resolve dirname bui
  • 当我打印新值时,我得到以前的浮点值

    我正在得到输出0 23从第二个printf 但类型转换给出了所需的输出 如果我不使用类型转换 则会打印先前的值 编译器版本是GCC 6 3 include
  • 如何分析 .net 垃圾收集器?

    我想知道如何分析垃圾收集器的性能并监控三代 我想知道是否有可能在任何时间点知道当前对象生活在什么地方gen0 gen1 gen2 你可以得到PerfMon 中有关 GC 性能的有用信息 但没有你想要的那么细化 NET内存性能有很多 计数器
  • 如何让 geom_errorbar 在 ggplot2 的条形图上正确“闪避”?

    我正在尝试制作带有误差线的分组条形图 但是 我无法使误差条看起来正确 即比主条更薄 并且位置正确 位于条的中心 这position选项和position dodge 似乎工作不正常 我不明白为什么 根据其他类似问题的例子 这应该有效 我正在
  • mybatis中动态使用HashMap进行参数映射

    好的 这有点重新发布这个问题使用 ibatis 将 HashMap 值插入表 但我正在寻找一种不同的方式 答案对我不起作用 DB1GetStudentDataMapper xml 这查询一个数据库
  • 在 Laravel 4 的 Eloquent 中使用枢轴模型数据作为与另一个模型的关系

    我有一个用于多对多关系的数据透视表 其中包括另一个模型的第三个索引参数 我希望能够使用 Eloquent 来访问这个模型 在我的应用程序中 我有一个User谁可以拥有很多Subjects还有很多Semesters 当用户拥有Subject
  • 当选择另一个单选按钮时,如何将其更改为“选中”?

    我希望你们能帮我解决这个问题 我怎样才能有一个单选按钮id A 将其属性更改为 已检查 当单选按钮id B 被选中 单选按钮 A 和 B 位于不同的组中 Thanks
  • 如何编写反汇编程序? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我有兴趣编写一个 x86
  • Yii CMultiFileUpload 选择多个文件

    得到了答案 将多个文件上传到数据库进行注册 已经尝试了很多方法来使用 CMultiFileUpload 小部件使多个文件上传可行 我已经检查并关注了以下链接 http www yiiframework com forum index php
  • safeUnbox() 无法反转

    我试图消除 Android 应用程序的所有警告 其中之一是 viewModel value 是一个装箱字段 但需要取消装箱才能执行 android checked 这可能会导致 NPE 因此数据绑定将安全地拆箱它 您可以更改表达式并使用 s