Android DataBinding错误.找不到访问者

Mid*_*fko 20 data-binding android android-databinding

当我尝试运行我的应用程序时出现以下错误:

Error:Execution failed for task ':app:compileDevelopmentDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Could not find accessor java.lang.String.giftRecipientName redacted.xml loc:182:63 - 182:93 ****\ data binding error ****
Run Code Online (Sandbox Code Playgroud)

我有一个Order对象,如下所示:

public class Order {
    public Address address;
    // unrelated fields and methods
}
Run Code Online (Sandbox Code Playgroud)

嵌套的Address对象如下所示:

public class Address {
    public String addressLine1;
    public String addressLine2;
    public String giftRecipientName;
    public Boolean isGift;
}
Run Code Online (Sandbox Code Playgroud)

在我的.xml中,我正在执行以下操作:

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

    <data>
        <variable name="order" type="example.redacted.models.Order"/>
    </data>
    // widgets and whatnot
    <TextView
        android:id="@+id/gift_recipientTV"
        android:layout_column="1"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:textStyle="bold"
        android:gravity="right"
        android:text='@{order.address.isGift ?  order.address.giftRecipientName : "" }'/>
Run Code Online (Sandbox Code Playgroud)

最后在我的片段中:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    RedactedBinding dataBinding = DataBindingUtil.inflate(inflater, R.layout.redacted, container, false);
    dataBinding.setOrder(_order);
    return dataBinding.getRoot();
}
Run Code Online (Sandbox Code Playgroud)

Mid*_*fko 26

经过数小时的反复试验,似乎Android数据绑定查看公共字段之前会查找getter .我的Order对象有一个名为getAddress的辅助方法

public class Order {
    public Address address;

    public String getAddress() {
        return address.addressLine1 + address.addressLine2;
    }
}
Run Code Online (Sandbox Code Playgroud)

绑定器调用该方法而不是访问公共地址字段.我把getAddress方法放在Address对象里面(可能应该在那里开始)并编译应用程序.


Khe*_*raj 5

Android DataBinding错误。找不到访问器

  • 正如此错误所表明的那样,绑定需要accessorgetter起作用,以及setter是否使用双向绑定
  • 因此,请始终在模型类中添加gettersetter


aks*_*618 5

就我而言,我从 xml 访问 kotlin 对象的属性:

object CurrentUser {
    // ...
    var userTeams: Map<String, String> = //...
    // ...
}
Run Code Online (Sandbox Code Playgroud)
object CurrentUser {
    // ...
    var userTeams: Map<String, String> = //...
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但由于数据绑定使用Java,它无法直接访问Kotlin对象,所以我将其更改为:

<Button
   android:text="@{CurrentUser.userTeams.get("id")}" />
Run Code Online (Sandbox Code Playgroud)

它有效!