突然我开始得到这个错误,我不知道为什么如果有人告诉我这个错误在哪里,就足够有帮助了。正如我所能得到的,这是因为android studio的新更新。 我得到的错误的详细总结。

Task :app:kaptDebugKotlin
    ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser compilation does not match the current runtime version 4.7.1ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser compilation does not match the current runtime version 4.7.1C:\Users\shubh\Downloads\MarginCalculator\app\build\generated\source\kapt\debug\com\kotlin_developer\margincalculator\DataBinderMapperImpl.java:10: error: cannot find symbol
    import com.kotlin_developer.margincalculator.databinding.FragmentCalculatorScreenBindingImpl;

    symbol:   class FragmentCalculatorScreenBindingImpl

    Task :app:kaptDebugKotlin FAILED
    location: package com.kotlin_developer.margincalculator.databinding
    FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 17s
29 actionable tasks: 27 executed, 2 up-to-date

当前回答

大声喊出上面@Rene Spies的回答,我在使用数据绑定时也得到了这个错误。当您将@Bindable注释放在Kotlin中数据类的主构造函数的字段上时,构建引擎不喜欢这样做。

所以不要做下面的事情,

data class MyAwesomePojo(
    @Bindable
    var firstname: String,
    var lastname: String
)

相反,你需要做的是

data class MyCorrectAwesomePojo(
    var lastname: String
):{
    @get:Bindable
    var firstname: String
        set(value){
            field = value
        }
}

好处:如果你像我一样试图使用双向绑定来防止设置和获取的无限循环,请记得在设置值到字段之前检查相同的值。

其他回答

改变

implementation "android.arch.persistence.room:runtime:1.1.1"
kapt "android.arch.persistence.room:compiler:1.1.1"

来 (更新4 -2021年9月)

 implementation "androidx.room:room-runtime:2.3.0"
 annotationProcessor "androidx.room:room-compiler:2.3.0"

我这里也有同样的问题。在我的例子中,原因是我在一个dagger模块中忘记了@Module注释。

要找到这样一个AS警报的真正问题,有必要深入:标题中的消息它只是最后一个,1个或多个错误的原因显示在左侧选择根元素,这显示了你确切的问题,检查我的打印屏幕如下:

我也有同样的问题。让我带你们看一下我是如何解决这个问题的,以及我是如何解决它的,也许你们会有更大的了解。

之前解决

@Entity(tableName = "modules")
data class Module
(
    @PrimaryKey val id: Int,
    val name: String
)

@Entity(tableName = "sessions")
data class Session
(
    @PrimaryKey(autoGenerate = true) var id: Int,
    @ColumnInfo(name = "module_id") val moduleId: Int,
    @ColumnInfo(name = "start_time") val startTime: String,
    @ColumnInfo(name = "end_time") val endTime: String
)

data class ModuleSession
(
    @Embedded val module: Module,
    @Relation(
        parentColumn = "id",
        entityColumn = "module_id"
    )
    val sessions: List<Session>,
    @ColumnInfo(name = "is_updated") val isUpdated: Boolean = false // The problem
)

在DAO中

@Transaction
@Query("SELECT * FROM modules")
abstract suspend fun getModuleSession(): List<ModuleSession>

我得到的错误是

A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution

所以我深入挖掘,找到了下面的信息

The columns returned by the query does not have the fields [isUpdated] in com.gmanix.oncampusprototype.Persistence.ModuleSession even though they are annotated as non-null or primitive. Columns returned by the query: [id,name]
    public abstract java.lang.Object getModuleSession(@org.jetbrains.annotations.NotNull()

我从POJO ModuleSession中删除了字段IsUpdated,并将其添加到会话表中

后的变化

@Entity(tableName = "sessions")
data class Session
(
    @PrimaryKey(autoGenerate = true) var id: Int,
    @ColumnInfo(name = "module_id") val moduleId: Int,
    @ColumnInfo(name = "start_time") val startTime: String,
    @ColumnInfo(name = "end_time") val endTime: String,
    @ColumnInfo(name = "is_updated") val isUpdated: Boolean = false
)

data class ModuleSession
(
    @Embedded val module: Module,
    @Relation(
        parentColumn = "id",
        entityColumn = "module_id"
    )
    val sessions: List<Session>
)

另一方面,交叉检查SELECT语句中是否有可能导致问题的字段,或者您可以使用@Ignore对其进行注释

但是,如果你仍然觉得不舒服,你可以发布你的代码。

我希望这能有所帮助

在终端上单击——stacktrace查看错误的详细信息。你可以在这里找到它:

M1芯片解决方案

如果你有一台MacBook Pro,那么在房间编译器之前添加kapt "org. x里尔:sqlite-jdbc:3.34.0"就有可能解决你的问题。

  kapt "org.xerial:sqlite-jdbc:3.36.0" // Only for computer with M1 CPU
  implementation("androidx.room:room-ktx:$room_version")
  kapt "androidx.room:room-compiler:$room_version"

点击这里查看更多信息。

有趣的是,我得到这个错误是因为我添加了Retrofit的描述。注意不要混淆“房间”和“改造”的描述。