突然我开始得到这个错误,我不知道为什么如果有人告诉我这个错误在哪里,就足够有帮助了。正如我所能得到的,这是因为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

当前回答

我得到这个错误后,做以下:

升级Android Studio到Arctic Fox 更新Kotlin插件到1.5.21版本 将我的Java版本升级到16

使用——stacktrace运行assembleDebug,我在日志中看到了这个异常:四处搜索,我找到了这个链接,它讨论了kapt和JDK16+之间的兼容性问题。

我通过在我的gradle中做这个改变来解决这个问题。属性文件: org.gradle。jvmargs = -Xmx1536m——非法存取=许可证

其他回答

在我的例子中,这是因为我没有在我的ViewModel中实现Observable。我添加了一个EditText约束布局与android:text="@={addProductViewModel.inputProductName}"

一旦我在ViewModel类中实现了Observable,错误就消失了

ViewModel

class AddProductViewModel (
    private val repository: ProductRepository,
    private val context: Context
): ViewModel(), Observable {

    @Bindable
    val inputProductName = MutableLiveData<String>()


    fun addProduct() {
        //inputProductName.value
    }

    override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
        TODO("Not yet implemented")
    }

    override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
        TODO("Not yet implemented")
    }
}

使用片段的MVVM数据绑定的完整示例

布局- add_product.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <data class=".AddProductBinding">
        <variable
            name="addProductViewModel"
            type="com.rao.iremind.AddProductViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <EditText
            android:id="@+id/editTextTextProductName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Product name"
            android:inputType="textPersonName"
            android:text="@={addProductViewModel.inputProductName}"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />



    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

AddProductFragment

class AddProductFragment: Fragment() {
    private lateinit var binding: AddProductBinding
    private lateinit var addProductViewModel: AddProductViewModel
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding =  DataBindingUtil.inflate(inflater, R.layout.add_product, container, false)
        val dao = SubscriberDatabase.getInstance(requireActivity().applicationContext).productDAO
        val repository = ProductRepository(dao)
        val factory = AddProductViewModelFactory(repository, requireActivity().applicationContext)
        addProductViewModel = ViewModelProvider(this, factory).get(AddProductViewModel::class.java)
        binding.addProductViewModel = addProductViewModel
        binding.lifecycleOwner = this
        val view = binding.root

        return view
    }
}

添加产品视图模型

class AddProductViewModel (
    private val repository: ProductRepository,
    private val context: Context
): ViewModel(), Observable {

    @Bindable
    val inputProductName = MutableLiveData<String>()


    fun addProduct() {
        //inputProductName.value
    }

    override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
        TODO("Not yet implemented")
    }

    override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
        TODO("Not yet implemented")
    }
}

希望这能有所帮助 R

在我的情况下,我使用协程,但我忘记添加Kotlin扩展和协程支持的房间

Def room_version = "2.2.6" 实现“androidx.room: room-ktx: room_version美元”

如果你已经升级到类路径'com.android.tools.build:gradle:4.0.0' 替换之前的版本

dependencies {
    classpath 'com.android.tools.build:gradle:3.6.3'
}

和Change gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-   all.zip`

在某些情况下,这可能会有所帮助 gradle.properties

kapt.include.compile.classpath=true

这种方法出现在我的一切房间数据库和协程的问题,甚至拼写错误。最后是当试图返回一个带有Flow after inserted列的单个值时,通过:Flow<Long> from DAOs类。

它应该是一个挂起函数,并且在插入列后只返回Long类型。

这些问题有时是模棱两可的,所以尝试阅读所有的构建输出消息,帮助我的消息是:错误:不确定如何处理插入方法的返回类型。