草庐IT

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

zhongjh 2023-09-14 原文

描述优缺点和简单使用
http://www.jianshu.com/p/d4e384c98987

用户指南
http://www.jianshu.com/p/b1df61a4df77

在使用多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;

    @Override
    public 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-artifacts
    at 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


2个抽象基类

最底层基类

第二个基类

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


实现类,大家可以看到,说找不到databinding,最开始我也以为是缓存原因,按照上面的方式全部解决,都不行,实在焦急啊!!最后……

两种方式解决:


看到这种奇怪的方式解决了吗?!标记FragmentOrderBinding是哪个类的就可以解决这个问题了……
如果怕灰色不小心删掉的话,可以使用这种泛型方式

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

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

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

8.databinding不存在

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


image.png

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


image.png

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

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


image.png

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

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

如果帮到您欢迎Star

一个非常丰富的开源库,如果你需要相册、录制、录音等操作,那么这个也许对你有一定的帮助:
zhongjhATC/AlbumCameraRecorder: ?一个高效的多媒体支持操作库,可多方面的简单配置操作相册、拍照、录制、录音等功能。也支持配套使用的展示图片、视频、音频的九宫格功能。 (An efficient multimedia support operation library, can be a variety of simple configuration operation album, photo, recording, recording and other functions.Also support supporting the use of the display of pictures, video, audio of the nine grid function.) (github.com)

有关DataBinding 大坑总结(网上我暂时搜不到解决方法)的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  5. Ruby 方法() 方法 - 2

    我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby​​-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco

  6. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  7. ruby - Highline 询问方法不会使用同一行 - 2

    设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案

  8. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  9. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

  10. ruby - 检查方法参数的类型 - 2

    我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)

随机推荐