2015-09-20 18 views
8

Tôi nhận được lỗi sau khi tôi cố gắng chạy ứng dụng của tôi:Lỗi DataBinding Android. không thể tìm thấy accessor

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 **** 

tôi có một đối tượng theo thứ tự mà trông như thế này:

public class Order { 
    public Address address; 
    // unrelated fields and methods 
} 

Address lồng nhau tượng vẻ như thế này:

public class Address { 
    public String addressLine1; 
    public String addressLine2; 
    public String giftRecipientName; 
    public Boolean isGift; 
} 

Trong .xml của tôi, tôi đang làm như sau:

<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 : "" }'/> 

Cuối cùng trong đoạn tôi:

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(); 
} 

Trả lời

10

Sau giờ dùng thử và lỗi có vẻ như Android vẻ dữ liệu ràng buộc để thu khí trước nó nhìn vào các lĩnh vực công cộng. Đối tượng đơn đặt hàng của tôi có phương thức trợ giúp được gọi là getAddress

public class Order { 
    public Address address; 

    public String getAddress() { 
     return address.addressLine1 + address.addressLine2; 
    } 
} 

Trình kết nối đã gọi phương thức đó thay vì truy cập trường Địa chỉ công khai. Tôi đặt phương thức getAddress bên trong đối tượng Address (nơi nó có lẽ đã bắt đầu với) và ứng dụng được biên dịch.

Các vấn đề liên quan