当前位置: 首页 > news >正文

DataBinding 大坑总结(网上我暂时搜不到解决方法)

在使用多Module中使用DataBinding会引发一些奇怪的问题,最近好好的腾出时间来折腾这些奇怪的问题:

1:如果当Module启动DataBinding重启AS启动报错的话,就启用允许多行代码

android { defaultConfig {multiDexEnabled true}
}
dependencies {//解决超过65546代码的问题compile 'com.android.support:multidex:1.0.2'
}

2:为什么include的Toolbar(或者别的控件)在代码里面显示是View?因为这个Toolbar的布局代码文件在Module,合并在app的时候,编译所看到的是view,这个只能由Google后面优化了,但是目前可以用这种方式来缓冲

public abstract class BaseFragmentListConditionDataBind<T, C, B extends ViewDataBinding> extends BaseFragmentListCondition<T, C> {public B mViewBinding;public ToolbarCommonBinding mToolbarCommonBinding;@Overridepublic void initDataBind(View view) {mViewBinding = DataBindingUtil.bind(view);mToolbarCommonBinding = DataBindingUtil.bind(view.findViewById(R.id.toolbarCommon));}
}

 3.因为module使用DataBinding这系列奇怪问题

Error:Execution failed for task ':library:test:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug'.
> failure, see logs for details.Error reading contents of H:\mobile\code\trunk\as\library\test\build\intermediates\data-binding-compiler\debug\dependent-lib-artifacts directory java.nio.file.NoSuchFileException: H:\mobile\code\trunk\as\library\test\build\intermediates\data-binding-compiler\debug\dependent-lib-artifactsat sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)at sun.nio.fs.WindowsDirectoryStream.<init>(WindowsDirectoryStream.java:86)at sun.nio.fs.WindowsFileSystemProvider.newDirectoryStream(WindowsFileSystemProvider.java:518)at java.nio.file.Files.newDirectoryStream(Files.java:457)at android.databinding.tool.DataBindingBuilder.getBRFilePackages(DataBindingBuilder.java:145)at android.databinding.tool.DataBindingBuilder.getJarExcludeList(DataBindingBuilder.java:128)at com.android.build.gradle.internal.LibraryTaskManager.lambda$excludeDataBindingClassesIfNecessary$19(LibraryTaskManager.java:688)

关于这个坑爹的问题我一直不敢确认我这个是否正确,也折腾了我好几天,我处理方式是把主项目的Module都引用到新项目的Module使用,然后获取到具体的错误问题,我这边获取到问题是把com.github.chrisbanes:PhotoView:1.0.0升级成com.github.chrisbanes:PhotoView:2.1.3。然后再运行主项目,这个问题又没了,真的是超级超级蛋疼。

4.多个module之间,他们生成的layout。名称绝对不能一样。

不然会出现上面的一系列问题。

5.如果以上问题都解决不了,删除app和module的所有build和.gradle文件夹,就可以解决了,关于第三个问题也是能用这个方法解决的

6.还是关于module之间的生成dataBinding的问题。关于这个问题我折腾了2,3天了,最后特意搞了一个小项目,这个问题目前google搜索不到,可能这种形式做法的相当相当少,但总算找到一个折腾的方式解决

假设我们有一个这样的需求,module项目使用抽象基类,并且抽象基类已经确定了生成好的databinding

 

 

至于基类的逻辑我们暂且不管,这不是重点,重点是我们看这个app的实现类 

两种方式解决:

 

 

正最终就是在app的类里面,明确该DataBinding是属于某个lib即可!

7.关于在module使用泛型DataBinding类时

会提示找不到所有生成的DataBinding。目前解决方式只能是module不用泛型DataBinding,只在app使用泛型DataBinding

8.databinding不存在

当编译错误的时候,会发现很多提示databinding不存在,如下图

如果你拖到最下面,会看到真正导致错误的问题,如下图

 

databinding有个问题,就是当你本来正常的项目,一顿猛如虎的代码操作后,运行编译出错,会出现一种情况,全是提示databinding不存在,并没有显示真正导致错误的问题,如下图 

那么解决方式:
可能目前还未比较完善,我是用排除方式一个一个模块进行删除,运行,找到真正的错误,最后在这里发现 

你们可以看到,错误提示里面,并没有提示如图中的代码错误。这种问题是非常纠结非常纠结的!
如果有更好的解决方式,求指导!

8. gradle升级到4.6后,DataBinding编译时报告参数过多

2019-9-27更新
这是最近碰到的一个问题,gradle4.1是没有这个问题的,而4.6就报这个参数过多问题了,原因是每个DataBinding编译生成的时候会在自动生成的类里面有个构造函数,而4.6的构造函数不知道为什么会报参数过多。至于解决方法,我目前是又退回4.1了,google暂时搜不到什么解决方法

9. 当编译后只显示编译错误,没有其他反馈的时候

可以输入该命令:gradlew compileDebugJavaWithJavac

然后就能看到详细的错误了
D:\yitu\MVVMRapid\app\src\main\java\com\my\mvvmrapid\MainActivity.java:4: 错误: 程序包com.my.mvvmrapid.databinding不存在

按照丰富的经验就是app没有引入databinding

 

 

 

http://www.lryc.cn/news/61483.html

相关文章:

  • Linux I/O复用函数的使用情况和select接口的介绍
  • leetcode:数字转换为十六进制数(详解)
  • Android 10 设置人脸解锁时,锁屏显示人脸解锁图标
  • 【嵌入式环境下linux内核及驱动学习笔记-(5-驱动的并发控制机制)】
  • 必学宝典 黑马《最新JavaWeb开发教程》上线
  • 【社区图书馆】学习如何读书
  • CO02工单组件,新增/删除/修改
  • MIT6.824 lab3AB记录
  • 一分钟了解美国棒球体系·棒球1号位
  • 通过ObjectMapper和JsonNode 把JSON字符串转换成树结构数据和获取树节点数据
  • 鉴源论坛 · 观模丨面向界面的图形化测试技术
  • Midjourney以图生图的详细教程(含6种案例介绍)
  • 基于单片机的电路特性测试仪的设计
  • 五一将迎2亿人次出行,君子签助力旅行社合规高效签旅游电子合同
  • IAP升级遇到的问题
  • 简单聊聊k8s,和docker之间的关系
  • 半小时学会HTML5
  • 研报精选230421
  • AI绘图风格对照表/画风样稿详细研究记录及经验总结(分析Midjourney和Stable Diffusion风格提示词实际使用情况)不断更新中...
  • 人工智能论文的风格特点
  • 成功上岸国防科大!
  • 【C语言】输入输出、字符串操作、内存操作、文件操作函数
  • [golang gin框架] 25.Gin 商城项目-配置清除缓存以及前台列表页面数据渲染公共数据
  • 文件夹改名,如何在改名之后批量复制文件夹名称
  • 汇编与内联 x86-64
  • OSCP-UT99(IRC、Unreal Tournament 99)
  • Kubernetes CPU内存资源限定
  • fitlog使用教程(持续更新ing...)
  • Linux下搭建Go开发环境
  • 一文搞懂SQL注入攻击