首页 > 解决方案 > Android数据绑定问题:“原因:无法猜测”

问题描述

我通过添加启用数据绑定

数据绑定 { 启用 = true }

kapt 'com.android.databinding:compiler:3.1.4'

在应用程序级别build.gradle文件中。

应用插件:'kotlin-kapt'

最重要的是添加。项目基于 kotlin 。

这是我的模型:

    package ir.app.myapplication;



data class cisclass(val equRevId:String)

主要活动 :

  val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        val user = cisclass("123")
        binding.setVariable(BR.cis, user)
        binding.executePendingBindings()

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    >

    <data>

        <variable
            name="cis"
            type="ir.app.myapplication.cisclass" />
    </data>

    <androidx.core.widget.NestedScrollView


        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp"
        android:orientation="vertical"
        android:scrollbars="vertical">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">



                    <TextView
                        android:text="@{cis.equRevId}"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textStyle="bold"

                        />


        </LinearLayout>


    </androidx.core.widget.NestedScrollView>

</layout>

我会收到这个错误:

java.lang.IllegalArgumentException: couldn't make a guess for ir.meedc.myapplication.cisclass
    at com.squareup.javapoet.Util.checkArgument(Util.java:64)
    at com.squareup.javapoet.ClassName.bestGuess(ClassName.java:171)
    at android.databinding.tool.ext.ExtKt.toTypeName(ext.kt:244)
    at android.databinding.tool.ext.ExtKt.toTypeName(ext.kt:192)
    at android.databinding.tool.ext.ExtKt.toTypeName(ext.kt:173)
    at android.databinding.tool.writer.BaseLayoutBinderWriter.createVariableFields(BaseLayoutBinderWriter.kt:229)
    at android.databinding.tool.writer.BaseLayoutBinderWriter.access$createVariableFields(BaseLayoutBinderWriter.kt:39)
    at android.databinding.tool.writer.BaseLayoutBinderWriter$createType$1.invoke(BaseLayoutBinderWriter.kt:67)
    at android.databinding.tool.writer.BaseLayoutBinderWriter$createType$1.invoke(BaseLayoutBinderWriter.kt:39)
    at android.databinding.tool.ext.Javapoet_extKt.classSpec(javapoet_ext.kt:39)
    at android.databinding.tool.writer.BaseLayoutBinderWriter.createType(BaseLayoutBinderWriter.kt:63)
    at android.databinding.tool.writer.BaseLayoutBinderWriter.write(BaseLayoutBinderWriter.kt:59)
    at android.databinding.tool.BaseDataBinder.generateAll(BaseDataBinder.kt:65)
    at com.android.build.gradle.internal.tasks.databinding.DataBindingGenBaseClassesTask$CodeGenerator.run(DataBindingGenBaseClassesTask.kt:212)
    at com.android.build.gradle.internal.tasks.databinding.DataBindingGenBaseClassesTask$writeBaseClasses$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:52)
    at com.android.build.gradle.internal.tasks.databinding.DataBindingGenBaseClassesTask$writeBaseClasses$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:31)
    at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:91)

我该如何解决?有什么问题?

标签: androidkotlindata-binding

解决方案


https://stackoverflow.com/a/50115802/7407809中所述, 您的模型类必须以大写字母开头。


推荐阅读