Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 科特林+;数据绑定在输入';处没有可行的替代方案';_Android_Kotlin_Android Databinding_Kapt - Fatal编程技术网

Android 科特林+;数据绑定在输入';处没有可行的替代方案';

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

请原谅我英语不好

我使用的是AndroidStudio3.1.1,我尝试使用数据绑定我的项目与
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