在'/activity_login.xml'DataBinding文件中找到重复的类,未生成BR

时间:2018-05-26 03:15:39

标签: android mvvm data-binding viewmodel android-databinding

我大多陷入了Android数据绑定BR问题。始终有单个activity.xml,但生成的绑定类显示错误。请告诉我如何解决此问题。

enter image description here

18 个答案:

答案 0 :(得分:4)

自定义绑定类名称解决了我的问题

<data class="ContactItem">
    …
</data>

答案 1 :(得分:4)

如果您正在使用Room ORM 检查您的DAO风格

示例:

@更新     字符串更新(呼叫); //失败

@Update
long update(Call call);//fail

@Update
int update(Call call);//success databinding build


@Update
void update(Call call);//success databinding build

答案 2 :(得分:2)

我通过在Gradle属性中添加android.databinding.enableV2 = true来实现。一切正常。

答案 3 :(得分:2)

如果您使用的是房间ORM ,请检查一下它们是否最近有所更改。解析SQL查询以及返回的方法类型与查询结果完全匹配的任何问题都可能影响数据绑定并显示异常错误。

我有一个类似的问题:

@Query("SELECT * from NotSellingReason where NotSellReasonId > 0")
    List<ReasonModel> getUnvisitingReasons();

我这里的通用类型错误。我必须使用ReasonEntity而不是ReasonModel,而且要花很长时间才能得到它!

  

另一个可能导致数据绑定失败的问题是关于 Dagger   DI 。如果您在项目中使用DI,请确保所有注入   类,...由匕首提供或约束。

答案 4 :(得分:2)

在xml中包含布局时,会出现此错误。


    model.add(Conv2D(32, (3, 3), strides=(1, 1), activation='relu'))

要在xml中包含其他布局,请遵循此  https://stackoverflow.com/a/38681418/1893503

答案 5 :(得分:2)

就我而言,这是Dagger 2版本的问题。 2.17及更高版本(今天的最新版本为2.20)无效。改回2.16可以解决我的问题。

查看有关此here

的更多讨论

答案 6 :(得分:1)

如果您正在使用房间持久性库,请再次检查它的代码。 İ遇到了同样的问题,在查看了我的代码后我看到了。这个有关房间持久性的问题。

最后.. ©我正在使用Room Persistence库,我检查了所有代码,然后找到了。检查您的房间型号。

答案 7 :(得分:1)

我在项目中使用Kotlin +匕首+数据绑定。不管dagger2版本如何,这种方法都应该起作用。

我为解决此问题所做的事情:

  1. 在gradle.properties文件中制作android.databinding.enableV2=false,然后清理并重建

  2. 能够看到与dagger2错误范围有关的实际错误

  3. 修复了我的匕首图和其他导入语句

  4. 设置回android.databinding.enableV2=true

答案 8 :(得分:1)

我收到了37个重复的错误,这都是由于在1个布局文件中导入错误

TypeError: <object_at_index_0> is not an Object in <eval>

我通过打开所有布局xml文件并手动检查来找到它。错误本身是完全无关的,因为如果我手动转到/ build / generated / data_binding ...,该错误仍然存​​在,但是构建不会再失败,并且不会报告任何错误或警告。

答案 9 :(得分:1)

在我的情况下,问题是因为ARouter不能很好地支持kotlin。当我使用@Autowired批注时,构建失败并且没有提示dataBinding,在重复的类中找到了

文件ActivityLoginBinding。然后在@Autowired之前添加@JvmField,它可以正常工作并建立成功。

因此,当您使用AndroidStuido将Java转换为Kotlin时,请注意,以这种方式生成的Kotin文件可能存在语法错误。可能是Java静态函数,数据绑定中@bindingadapter的注释,转换为kotlin,以及您会得到一个错误。解决该问题,您就完成了

例如Java

 @BindingConversion
    public static String converStr(CommonUser user) {
        return user.getAge() + user.getName() + user.isSingle();
    }

    //同上,不需要显示因如何调用,在xml中即可使得textview有一个 bg 的属性,app命名空间的,
    @BindingAdapter({"bg"})
    public static void randomName(TextView tv, String color) {
        tv.setTextColor(Color.parseColor(color));
    }

在kotlin中使用时,例如:

//this is root node in the kotlin file ,no {} 
@BindingAdapter("srlEnableRefresh")
fun randomName( tv:TextView, color:String) {
    tv.setTextColor(Color.parseColor(color))
}

object Tools{
   @JvmStatic
    @BindingAdapter("srlEnableRefresh")
    fun randomName( tv:TextView, color:String) {
        tv.setTextColor(Color.parseColor(color))
    } 
}

我希望这个答案能回答您的问题。我的英语很差! ^ ^

答案 10 :(得分:1)

在我的情况下,问题是由于分配给butterknife的onclick方法的私有修饰符,请确保分配给butterknife的所有字段和方法都是公开的

答案 11 :(得分:1)

我有同样的问题。就我而言,我使用的是 Room ,并且我没有在Entity类中编写setter方法。因此,您还需要检查情况。

答案 12 :(得分:1)

在我看来,这是由于我将List更改为ArrayList而发生的; 改回List后问题已解决;

 @Query("SELECT * FROM " + PurchaseConstants.TABLE_NAME + " ORDER BY purchaseTime DESC")
    List<Purchase> getAllPurchases();

答案 13 :(得分:1)

在我的情况下,此问题是由以下事实引起的:在Room ORM的Entity类中,私有字段的setter和getter名称与Java bean命名约定不匹配。

答案 14 :(得分:1)

我遇到了同样的问题,这是因为我引用了一个未知类的变量

<variable name="handler" type="com.example.org.UnknownClass" />

我只需要纠正这个错误。

答案 15 :(得分:0)

此问题有很多原因。您可以尝试此命令。工作:)

gradlew build 

答案 16 :(得分:0)

也偶然发现了该死的东西,它在发生时很烂。公平的方式,我会采用以下两种方式:

  • 由于未完全生成绑定,因此您可能无法获得有趣的构建错误(例如,尝试生成它的样板的房间),因此应增加-Xmaxerrs标志以显示最大错误数量

  • 就我而言,灵感来自于切换到另一个Android Studio和Gradle插件版本(在AS 3.4,beta通道中,我遇到了实际的构建错误)

答案 17 :(得分:0)

对我来说,将kapt替换为annotationProcessor起作用

annotationProcessor "com.android.databinding:compiler:3.1.3"