Android 科特林+;数据绑定在输入';处没有可行的替代方案';
请原谅我英语不好 我使用的是AndroidStudio3.1.1,我尝试使用数据绑定我的项目与Android 科特林+;数据绑定在输入';处没有可行的替代方案';,android,kotlin,android-databinding,kapt,Android,Kotlin,Android Databinding,Kapt,请原谅我英语不好 我使用的是AndroidStudio3.1.1,我尝试使用数据绑定我的项目与kotlin,但我在尝试运行项目时出错。我收到的错误消息如下所示: e:[kapt]发生异常: android.databinding.tool.util.LoggedErrorException:找到数据绑定 错误。 ****/数据绑定错误****消息:语法错误:在输入“??”处没有可行的替代方案 文件:/Users/eraise/Code/Demo/app/src/main/res/layout/l
kotlin
,但我在尝试运行项目时出错。我收到的错误消息如下所示:
e:[kapt]发生异常:
android.databinding.tool.util.LoggedErrorException:找到数据绑定
错误。
****/数据绑定错误****消息:语法错误:在输入“??”处没有可行的替代方案
文件:/Users/eraise/Code/Demo/app/src/main/res/layout/layout\u main.xml
loc:20:28-20:64****\数据绑定错误****
我可以在终端上编译apk
命令:/gradlew assembleDebug,
这很好
我的顶级build.gradle具有以下配置:
buildscript {
ext.kotlin_version = '1.2.31'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://www.jitpack.io'}
}
}
应用程序目录中的My build.gradle(仅适用于相关部分):
My layout_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable
name="version"
type="String"/>
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tv_version_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text='@{"测试" + version??"unknow", default=版本号}'
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#EEE"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
/>
</LinearLayout>
</layout>
如果不使用kotlin,我可以正确运行。我认为问题在于支架。试着这样做:
@{"test" + (user.name??"unknow", default=versionnumber)}'
我想你给我的表达方式错了
android:text='@{测试" + 版本??“未知”,默认值=版本号}'代码>
我的意思是,你想用这个实现什么?是不是如果版本为空,那么返回“未知”,如果不是,则返回版本号? 我想也是因为你没有在你的文章中使用“
(双引号)版本号
如果您想这样表达,请尝试以下方法:
android:text='@{测试“+(版本!=null?”版本号“:“未知”)}'
预期结果
如果版本!=null
->测试版本号
如果version==null
->测试不为人知
我试过了,效果很好!但是如果预期的结果不是你想要的,请告诉我,我们可以解决它。这个由kapt引起的问题对汉字不起作用。
因此,请将其替换为英语或将您的计算机环境设置为:
JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8
我认为这是消息语言的问题,因为我试过你的代码,每当我用英语添加所有消息时,它都会像这样正常工作:android:text='@{“test”+user.name??“unknow”,default=versionnumber}“。我不知道它为什么不适用于您的语言消息,我仍在寻找问题和解决方案。请尝试注释kapt”com.android.databinding:compiler:3.1.1”
您仍然需要kapt”com.android.databinding:compiler:3.1.1”
,最好更新到最新的依赖项
@{"test" + (user.name??"unknow", default=versionnumber)}'
JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8