This may cause NPE so Data Binding will safely unbox it.
编译警告:使用DataBinding 时,如果你在xml中使用了基本数据类型,可能会出现如下编译警告:
This may cause NPE so Data Binding will safely unbox it.
You can change the expression and explicitly wr ready with safeUnbox() to prevent the warning
大致意思是:
这可能会导致空指针,所以Data Binding 将安全的拆箱,你可以显示的调用`safeUnbox()`来消除这个警告.
警告原因:
就是java的自动拆箱,比如如下代码,直接调用outboolean()
编译会报错,但是调用outBoolean()
却可以。因为基本数据类型是不可以传null
的,引用类型可以。在outBoolean()
中调用outboolean()
编译并不会报错,但是运行时会NPE
。
@Testpublic void addition_isCorrect() throws Exception {//erroroutboolean(null);//cause NPEoutBoolean(null);}void outBoolean(Boolean b){outboolean(b);}void outboolean(boolean b){System.out.println(b);}
解决方法:
方法一:
如果你没有强迫症,可以直接忽略这个警告。警告里也说了Data Binding 将安全的拆箱
,所以不处理并不会导致任何问题,因为DataBinding已经帮我们安全的拆箱了。
以Boolean
为例,看看Data Binding 是如何安全拆箱的://可能为空 boolean mInEdit;//执行绑定 protected void executeBindings() {//创建一个变量(名字好长..)boolean androidDatabindingDynamicUtilSafeUnboxInEdit = false;//自动生成的ViewDataBinding 就是这样写的,虽然并没什么用//(inEdit这个局部变量在这个就在下面的方法里用到了,为啥不直接用mInEdit?)java.lang.Boolean inEdit = mInEdit;//安全拆箱androidDatabindingDynamicUtilSafeUnboxInEdit = android.databinding.DynamicUtil.safeUnbox(inEdit);//下面的代码里面只使用 androidDatabindingDynamicUtilSafeUnboxInEdit ,不再使用mInEdit和inEdit;// 所以肯定不会空指针了 }
这个是safeUnbox方法源码:
/** @hide */ protected static boolean safeUnbox(java.lang.Boolean boxed) {return boxed == null ? false : (boolean)boxed; }
方法二
按警告说的改代码喽,就加一个safeUnbox()
,不用import
,自动生成的**DataBinding
的父类ViewDataBinding
中有这个方法。
修改前:<layout > <data><import type="android.view.View" /><variable name="inEdit"type="Boolean" /> </data> <ImageView ...android:visibility="@{inEdit?View.GONE:View.VISIBLE}" /> </layout>
修改后:
<layout > <data><import type="android.view.View" /><variable name="inEdit"type="Boolean" /> </data> <ImageView ...android:visibility="@{safeUnbox(inEdit)?View.GONE:View.VISIBLE}" /> </layout>
然后就没有警告了……
This may cause NPE so Data Binding will safely unbox it.相关推荐
- Android开发教程 - 使用Data Binding(二)集成与配置
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...
- XAML数据绑定(Data Binding)
XAML数据绑定(Data Binding) Data Binding可以使得XAML标签属性的赋值更为灵活和方便.在绑定过程中,获取数据的标签成为目标标签:提供数据的标签成为源标签.在XAML中,一 ...
- Data Binding Library数据绑定框架
Data Binding Library是Google在2015年IO大会上发布的一个用于实现MVVM设计模式的支持库 环境配置 在Android Studio 2.0 原生支持Data Bindin ...
- android 高级项目,从零开始的Android新项目8 - Data Binding高级篇
承接上篇,本篇继续讲解一些Data Binding更加进阶的内容,包括:列表绑定.自定义属性.双向绑定.表达式链.Lambda表达式.动画.Component注入(测试)等. 列表绑定 App中经常用 ...
- 谷歌推荐Data Binding实现MVVM模式(完整文档)
Data Binding 类库 这篇文档将教你如何运用 Data Binding 类库来编写声明试布局,并且尽量减少粘合代码对你的应用逻辑和布局上的绑定. Data Binding 是一种灵活和广泛兼 ...
- WPF中的Data Binding调试指南
点击蓝字"大白技术控"关注我哟 加个"星标★",每日良时,好文必达! WPF中的Data Binding如何Debug? 大家平时做WPF开发,相信用Visua ...
- WPF中的数据绑定Data Binding使用小结
完整的数据绑定的语法说明可以在这里查看: http://www.nbdtech.com/Free/WpfBinding.pdf MSDN资料: Data Binding: Part 1 http:// ...
- Data Binding的使用总结
2019独角兽企业重金招聘Python工程师标准>>> 个人使用Data Binding 框架,觉得代码很简洁,解耦性很强,下面简单介绍使用方法 首先在项目gradle中添加如下代码 ...
- Data Binding 使用教程一
好长时间不写文章了,最近公司项目中用到了DataBinding,首次接触,就来和大家探讨下...哈哈 1. 为什么要使用DataBinding 1.目前一般情况下,我们在实现UI 界面时,通常都是使用 ...
最新文章
- 不知所“云”:小企业对云托管知之甚少
- 《图解HTTP》读书笔记--第7章 确保Web安全的HTTPS
- android 只输入数字与小数点_Android金额输入框只允许输入小数点后两位效果
- 保存光谱曲线出现问题_直读光谱仪计量周期-这家好【博越仪器】
- Kali Linux 自定义分辨率
- java的joptionpane空白_java – JOptionPane无法正确显示?
- sql如何遍历几百万的表_SQl SERVER 2000 遍历表中数据的方法
- 2022秋招求职记录(图像 视觉 c++)
- Python爬虫实战之爬取链家广州房价_04链家的模拟登录(记录)
- 开源项目学习:XINS
- UE5 C++ Rider 编程指南 1.编辑器基础
- 转动的太极纯HTML代码
- Java程序员编程学习之路资源合集
- html5流水账,流水记账.html
- Fulutter 设置圆角背景图片Container 设置边框、圆角、阴影
- 如何使用微PE给电脑装windows10系统?
- 标题:信号、传输介质、数制转换
- 小程序实习生实现手机机型预约
- Google PR劫持(转)
- 大学计算机应用技术基础vb考试,计算机vb考试试题精选