kotlin和DataBinding一起使用踩坑日记
2017-05-28 18:06
232 查看
前几天google 在IO大会上宣布kotlin成为android开发的一级语言,第二天就推出android studio3.0,自带android-kotlin插件。
号称踩坑小王子的我,怎能不作死尝试一把。
首先简单过了一遍kotlin教程,嗯,跟swift差不多,没难度。
直接搞了两个demo(一个java的,一个kotlin),然后用android studio3.0自带的,把java转成kotlin,两个demo都一把通过,so easy,kotlin写起来也很爽,很有逼格,决定搞个复杂点(copy一份公司项目),然后就被各种坑了。
然后就悲剧了,
1. 有的类只被转了一半
2. 有的类不知道被转成什么鬼
3.
4. 带
…
手动改了半天,发现还有一堆红色,果断把项目删了��,重新导入。
先按套路走一遍
1. 编译一次,跑起来再说
2. 没有2了,第一步就跪了��♂️
我就操了,啥也没动,编译都不过?这怎么玩。
淡定、淡定,还是按套路走吧,看下错误提示
循环依赖了?小问题
在app下的build.gradle中,去掉kotlin中的dataBinding依赖,然后在编译
然而并没什么卵用,还是一样的错,此时我一脸懵逼。
既然编译器给出了具体错误,那就好办,继续按套路来。
不懂问度娘,然后砸电脑的心都有了,翻到第N页了,你妹的都是互相转发的,N年前的老问题。
度娘靠不住,只好祭出我看片才用的梯子,google一搜,前几条都是stackoverflow的回答,但都不是我要的答案。
然后进入全球最大同性交流平台
http://stackoverflow.com/questions/44035504/how-to-use-data-binding-and-kotlin-in-android-studio-3-0-0
里面说了是kotlin1.1.2-4和Android Gradle plugin 3.0.0-alpha1的问题,根据大神提供的步骤,改成1.1.2-2,
解决方法
用
这种错误时不时会出现,
谁能告诉我这是什么情况
解决方法
先把这段注释掉,编译一次,不要管有没有报错,
然后打开这段代码,再编译一次,这问题一般都会消失,
如果还没有,clean项目,关掉studio,重启电脑,重复上面两部,多试几次
android studio3.0 canary1.0 升级到android studio3.0 canary2.0没碰到该问题了
号称踩坑小王子的我,怎能不作死尝试一把。
首先简单过了一遍kotlin教程,嗯,跟swift差不多,没难度。
直接搞了两个demo(一个java的,一个kotlin),然后用android studio3.0自带的,把java转成kotlin,两个demo都一把通过,so easy,kotlin写起来也很爽,很有逼格,决定搞个复杂点(copy一份公司项目),然后就被各种坑了。
自带的java转kotlin功能
作为资深强迫症患者,当然是先把之前的java代码转成kotlin啦。然后就悲剧了,
1. 有的类只被转了一半
2. 有的类不知道被转成什么鬼
3.
RecyclerView.Adapter里的
RecycleViewHolder居然被转成
interface了,里面的方法也变得乱七八糟,
4. 带
static的类和方法基本没有转对过,单例模式更加悲剧
…
手动改了半天,发现还有一堆红色,果断把项目删了��,重新导入。
kotlin和dataBinding
回到起点再来一次,现在保留之前的java代码,新的代码用kotlin编写,总没问题了吧。先按套路走一遍
1. 编译一次,跑起来再说
2. 没有2了,第一步就跪了��♂️
我就操了,啥也没动,编译都不过?这怎么玩。
淡定、淡定,还是按套路走吧,看下错误提示
* What went wrong: Circular dependency between the following tasks: :app:compileDebugKotlin +--- :app:dataBindingExportBuildInfoDebug | \--- :app:compileDebugKotlin (*) \--- :app:kaptDebugKotlin \--- :app:dataBindingExportBuildInfoDebug (*)
循环依赖了?小问题
在app下的build.gradle中,去掉kotlin中的dataBinding依赖,然后在编译
compile ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"){ exclude group: 'com.android.dataBinding', module: 'compiler' }
然而并没什么卵用,还是一样的错,此时我一脸懵逼。
既然编译器给出了具体错误,那就好办,继续按套路来。
不懂问度娘,然后砸电脑的心都有了,翻到第N页了,你妹的都是互相转发的,N年前的老问题。
度娘靠不住,只好祭出我看片才用的梯子,google一搜,前几条都是stackoverflow的回答,但都不是我要的答案。
然后进入全球最大同性交流平台
stackoverflow,在里面一搜。所噶,第一页就有个相同的提问,还被标明问题已解决的原谅绿,果断点进去
http://stackoverflow.com/questions/44035504/how-to-use-data-binding-and-kotlin-in-android-studio-3-0-0
里面说了是kotlin1.1.2-4和Android Gradle plugin 3.0.0-alpha1的问题,根据大神提供的步骤,改成1.1.2-2,
local.properties里去掉kotlin的增量编译
kotlin.incremental=false,重新编译,问题解决。
DataBinding注解不能用
java代码中的set和get方法,在kotlin中以不同的方式出现,导致@Bindable和
notifyPropertyChanged(BR.xxl)不能直接用于get和set中。
解决方法
用
ObservableField
在xml布局中,没有代码提示
xml中引用databinding,只有属性提示,没有方法提示报错莫名其妙
本来databinding报错就天马行空了,配上kotlin,这错误更加看不懂,经常在编译时就出错这种错误时不时会出现,
谁能告诉我这是什么情况
解决方法
dataBinding { enabled = true }
先把这段注释掉,编译一次,不要管有没有报错,
然后打开这段代码,再编译一次,这问题一般都会消失,
如果还没有,clean项目,关掉studio,重启电脑,重复上面两部,多试几次
添加res文件报错
如果在res下添加新的文件或文件夹,必须要clean一下,不然各种找不到资源android studio3.0 canary1.0 升级到android studio3.0 canary2.0没碰到该问题了
相关文章推荐
- Kotlin 踩坑日记(一)Kotlin Dagger2 配置使用
- android studio 最新3.0 kotlin与databinding 结合使用报错。
- Android 使用Kotlin 和 DataBinding 遇到 not access class问题
- Kotlin 踩坑日记(四) Maven Google 仓库 gradle 使用
- 在Android上,怎样与Kotlin一起使用Retrofit(KAD21)
- 使用javascript,让左右2栏的高度随中栏一起自动延伸
- appfuse例子一步步解析!结合eclipse3.0一起使用
- DetailsView 的用法(与GridView 一起使用)
- 日记 [2007年01月31日]CENTOS4下mldonkey使用指南
- 自定义 WebSphere Studio 以将 Struts 脚本工具与 Jython 中的 ActionClass 一起使用
- Struts心得—DispatchAction使用日记
- 跟我一起学Windows Workflow Foundation(5)-----使用activity设计器创建一个整合的定制activity
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- 日记 [2007年01月21日]linux下使用IE
- 跟我一起学Windows Workflow Foundation(4)-----使用Listen,Delay,和其他envnt-based定制活动
- 第一次使用网络上的Blog,感觉就是写日记
- Windows SharePoint Services 虚拟服务器没被配置为与 ASP.NET 2.0.50727.42 一起使用-解决办法
- 跟我一起学Windows Workflow Foundation(3)-----使用If/Else活动,定制活动处理工作流,使用事件传递数据
- 和JSF一起使用JSTL和其它的JSP定制标记
- Qt使用日记(1): 安装