Android数据绑定错误:任务“:app:dataBindingProcessLayoutsDebug”执行失败

q3aa0525  于 2022-12-09  发布在  Android
关注(0)|答案(6)|浏览(251)

我的合作伙伴在我们的项目使用Android databinding.in我的PC有错误,但在他的Mac没有错误。我不能解决这个程序。请帮助!!

dataBinding {
    enabled = true
}

androidstudio第一个版本说

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:       Invalid byte 2 of 2-byte UTF-8 sequence.

然后我使用UTF-8重新保存XML文件。但一个新的问题birth.like这:

:app:dataBindingProcessLayoutsDebug
line 1:0 mismatched input '?' expecting {COMMENT, SEA_WS, '<', PI}
Error:Execution failed for task ':app:dataBindingProcessLayoutsDebug'.

错误消息(没有错误消息)

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:bind="http://schemas.android.com/apk/res-auto">
    <data>
        <import type="android.view.View"/>
        <import type="com.vomoho.vomoho.common.Utils"/>
        <variable name="postDetail" type="com.vomoho.vomoho.entity.PostDetail" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:orientation="vertical">

        <include
            android:id="@+id/top"
            layout="@layout/dt_item_postdetail_top"
            bind:postDetail="@{postDetail}"/>

        <ImageView
            android:id="@+id/img1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="8dp"
            android:scaleType="centerCrop"
            android:visibility="@{Utils.getPostType(postDetail.picList) == 0 ? View.GONE : View.VISIBLE}"
            bind:imageUrl="@{postDetail.picList.size() > 0 ? postDetail.picList.get(0) : ``}"
            bind:width="@{Utils.getPostImgWidth(Utils.getPostType(postDetail.picList))}"
            bind:height="@{Utils.getPostImgHeight(Utils.getPostType(postDetail.picList))}" />

        <include
            android:id="@+id/bottom"
            layout="@layout/dt_item_postdetail_bottom"
            bind:postDetail="@{postDetail}"/>
    </LinearLayout>
    </layout>
70gysomp

70gysomp1#

我也有同样的问题,我终于找到了解决办法。
我发现有一个布局xml文件是这样写的:

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='@{"年龄 " + String.valueOf(user.age)}'/>

然后它不能建立在Windows平台上,但它可以建立在Mac OS X平台上,我认为这是Android数据绑定的一个bug,所以我的临时解决方案是:
不要在@{}部分写入任何字符,使用字符串引用代替。(在我的例子中,它被替换为android:text='@{ @string/age_text + String.valueOf(user.age) }'/>
希望对你有帮助。

ru9i0ody

ru9i0ody2#

同样的问题持续了一天,终于找到了根本原因。Andoid gradle插件没有很好地处理带有字节顺序标记(BOM)的编码。这是一个编码阅读问题。如果文件以UTF-8 BOM格式保存,Android gradle工具将使用UniversalDetector库检测编码为“UTF-8”。类android.databinding.tool.store.LayoutFileParser将如下所示:

InputStreamReader reader = new InputStreamReader(fin, “UTF-8”);

reader.read()返回的第一个字符是0xfeff。是的,它是错误消息line 1:0 mismatched input '?' expecting {COMMENT, SEA_WS, '<', PI}中的**'?'**。
参考https://en.wikipedia.org/wiki/Byte_order_mark处的BOM幻数
通用检测器如何在http://chardet.readthedocs.io/en/latest/how-it-works.html下工作

yks3o0rb

yks3o0rb3#

我也有这个错误。在我的例子中,我在布局文件的底部有一个冗余的xml头。
尝试删除空白(或删除标题),更改:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"

到...

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
lf3rwulv

lf3rwulv4#

我遇到了与此日志相同的问题:

line 1:0 extraneous input '' expecting {COMMENT, SEA_WS, '<', PI}

这对我来说是超级奇怪的,没有真实的的反馈。要解决它:
1.已创建新布局资源文件
1.复制并粘贴原始文件的内容,只保留第一个字符
1.我自己将其添加到新文件中。

u4vypkhs

u4vypkhs5#

同样的情况!我的同事在Linux和Mac上使用项目没有问题,但我不能在Windows上构建它。
最后经过3天尝试本地化异常,我发现2布局导致错误。
在我的例子中,问题是android:text属性数据绑定布局中的大西里尔符号“И”。

cgh8pdjw

cgh8pdjw6#

我得到这个错误:

line 1:0 mismatched input '?' expecting {COMMENT, SEA_WS, '<', PI}

我通过移除

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

从我的xml文件的顶部的这一行。
请注意,我使用的是viewBinding而不是dataBinding

buildFeatures{
    viewBinding true
}

相关问题