2015-09-20 11 views
8

ich die folgende Fehlermeldung erhalten, wenn ich versuche, meine app zu laufen:Android DataBinding-Fehler. Konnte nicht gefunden 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 **** 

ich ein Order-Objekt haben, die wie folgt aussieht:

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

Die verschachtelte Adressobjekt aussieht wie folgt aus:

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

In meinem .xml mache ich folgendes:

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

schließlich in meinem Fragment:

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

Antwort

10

Nach Stunden der Versuch und Irrtum scheint es, dass Android-Datenbindungs ​​Looks für Getter vor es in öffentlichen Bereichen aussieht. Mein Bestellobjekt hatte eine Hilfsmethode mit dem Namen getAddress

Der Ordner rief diese Methode, anstatt auf das öffentliche Adressfeld zuzugreifen. Ich habe die Methode getAddress in das Address-Objekt eingefügt (wo es wahrscheinlich hätte sein sollen) und die App kompiliert.

Verwandte Themen