2015-09-20 18 views
8

sto ottenendo il seguente errore quando provo a fare funzionare il mio app:Errore DataBinding Android. Impossibile trovare di accesso

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

Ho un oggetto Ordine che assomiglia a questo:

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

Il nidificato Indirizzo sguardi degli oggetti in questo modo:

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

Nel mio .xml sto facendo quanto segue:

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

Infine nel mio frammento:

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

risposta

10

Dopo ore di tentativi ed errori sembra che Android sembra di associazione dati per getter prima si guarda campi pubblici. Il mio oggetto Ordine aveva un metodo di supporto chiamato getAddress

public class Order { 
    public Address address; 

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

Il legante chiamava quel metodo, invece di accedere al campo Indirizzo pubblico. Ho inserito il metodo getAddress all'interno dell'oggetto Address (dove probabilmente avrebbe dovuto iniziare) e l'app compilata.

Problemi correlati