美文网首页AndroidDataBindingAndroid开发经验谈
DataBinding 大坑总结(网上我暂时搜不到解决方法)

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

作者: zhongjh | 来源:发表于2017-12-29 15:18 被阅读985次

描述优缺点和简单使用
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文件夹,就可以解决了,关于第三个问题也是能用这个方法解决的

6.还是关于module之间的生成dataBinding的问题。关于这个问题我折腾了2,3天了,最后特意搞了一个小项目,这个问题目前google搜索不到,可能这种形式做法的相当相当少,但总算找到一个折腾的方式解决
假设我们有一个这样的需求,module项目使用抽象基类,并且抽象基类已经确定了生成好的databinding

2个抽象基类
最底层基类
第二个基类
至于基类的逻辑我们暂且不管,这不是重点,重点是我们看这个app的实现类
实现类,大家可以看到,说找不到databinding,最开始我也以为是缓存原因,按照上面的方式全部解决,都不行,实在焦急啊!!最后……

两种方式解决:


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

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

相关文章

网友评论

  • Cccccccwwww:我的module里面使用了databinding 后 报这个错Failed resolution of: Landroid/databinding/DataBinderMapperImpl; 这是啥原因啊 求解
    zhongjh:@Cccccccwwww 各大原因都已经写上了
    Cccccccwwww:@qq名长是因为你没给我备注 是啊。。。现在出问题了 请问一下 这可能是什么原因造成的啊?
    zhongjh:在module使用databinding特别容易出现我上面所述的各方面问题
  • 9512f06b6537:都删了没有解决....求解啊
    9512f06b6537:谢谢大佬,问题找到了.GreenDao 出错了. 我项目依赖库里边使用了DataBinding ,也有Greendao 报异常和上边是一样的 ,我重新走了遍流程才找到.
    zhongjh:@威武霸气你钒哥 那需要仔细看看每个错误,因为DataBinding有个问题就是,如果有其他小错误(不是属于DataBinding的错误),它也会一起报的
  • D13954:v2版本的有没有demo。按照官方文档方法流程,根本跑不起来
    zhongjh:@起点_D 简单的databind 的demo我没有,我只是搜集了我所有碰到的bug和解决方式而已。简单的例子网上有很多的
    debug_cat:@qq名长是因为你没给我备注 2版本的,普通设置数据或者列表的demo,我这边按照这个文档做不出来的,如果有就上个github呗
    zhongjh:v2版本什么demo?
  • 一个有故事的程序员:谢谢你啊,解决了我的问题。

本文标题:DataBinding 大坑总结(网上我暂时搜不到解决方法)

本文链接:https://www.haomeiwen.com/subject/wpygixtx.html