编译警告:使用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.相关推荐

  1. Android开发教程 - 使用Data Binding(二)集成与配置

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  2. XAML数据绑定(Data Binding)

    XAML数据绑定(Data Binding) Data Binding可以使得XAML标签属性的赋值更为灵活和方便.在绑定过程中,获取数据的标签成为目标标签:提供数据的标签成为源标签.在XAML中,一 ...

  3. Data Binding Library数据绑定框架

    Data Binding Library是Google在2015年IO大会上发布的一个用于实现MVVM设计模式的支持库 环境配置 在Android Studio 2.0 原生支持Data Bindin ...

  4. android 高级项目,从零开始的Android新项目8 - Data Binding高级篇

    承接上篇,本篇继续讲解一些Data Binding更加进阶的内容,包括:列表绑定.自定义属性.双向绑定.表达式链.Lambda表达式.动画.Component注入(测试)等. 列表绑定 App中经常用 ...

  5. 谷歌推荐Data Binding实现MVVM模式(完整文档)

    Data Binding 类库 这篇文档将教你如何运用 Data Binding 类库来编写声明试布局,并且尽量减少粘合代码对你的应用逻辑和布局上的绑定. Data Binding 是一种灵活和广泛兼 ...

  6. WPF中的Data Binding调试指南

    点击蓝字"大白技术控"关注我哟 加个"星标★",每日良时,好文必达! WPF中的Data Binding如何Debug? 大家平时做WPF开发,相信用Visua ...

  7. WPF中的数据绑定Data Binding使用小结

    完整的数据绑定的语法说明可以在这里查看: http://www.nbdtech.com/Free/WpfBinding.pdf MSDN资料: Data Binding: Part 1 http:// ...

  8. Data Binding的使用总结

    2019独角兽企业重金招聘Python工程师标准>>> 个人使用Data Binding 框架,觉得代码很简洁,解耦性很强,下面简单介绍使用方法 首先在项目gradle中添加如下代码 ...

  9. Data Binding 使用教程一

    好长时间不写文章了,最近公司项目中用到了DataBinding,首次接触,就来和大家探讨下...哈哈 1. 为什么要使用DataBinding 1.目前一般情况下,我们在实现UI 界面时,通常都是使用 ...

最新文章

  1. 不知所“云”:小企业对云托管知之甚少
  2. 《图解HTTP》读书笔记--第7章 确保Web安全的HTTPS
  3. android 只输入数字与小数点_Android金额输入框只允许输入小数点后两位效果
  4. 保存光谱曲线出现问题_直读光谱仪计量周期-这家好【博越仪器】
  5. Kali Linux 自定义分辨率
  6. java的joptionpane空白_java – JOptionPane无法正确显示?
  7. sql如何遍历几百万的表_SQl SERVER 2000 遍历表中数据的方法
  8. 2022秋招求职记录(图像 视觉 c++)
  9. Python爬虫实战之爬取链家广州房价_04链家的模拟登录(记录)
  10. 开源项目学习:XINS
  11. UE5 C++ Rider 编程指南 1.编辑器基础
  12. 转动的太极纯HTML代码
  13. Java程序员编程学习之路资源合集
  14. html5流水账,流水记账.html
  15. Fulutter 设置圆角背景图片Container 设置边框、圆角、阴影
  16. 如何使用微PE给电脑装windows10系统?
  17. 标题:信号、传输介质、数制转换
  18. 小程序实习生实现手机机型预约
  19. Google PR劫持(转)
  20. 大学计算机应用技术基础vb考试,计算机vb考试试题精选

热门文章

  1. Buffer(缓冲器)
  2. 搞定制作好看icon
  3. 在abap中的SQL嵌套
  4. smartforms设备类型CNSAPWIN不支持页格式ZXXX
  5. 安费诺面试经验(已面试,等通知)
  6. 各种机器学习分类模型的优缺点
  7. 骨感传导蓝牙耳机怎么样、骨感传导蓝牙耳机有什么特点
  8. 获取两个向量中间位置的点
  9. SAP HANA SQL系列二:数据类型转换函数
  10. 计算机网络 - (三)电脑如何获取到IP的