Pertanyaan Kesalahan menggunakan penyatuan data di Android


Saya mencoba untuk menguji data yang mengikat seperti yang diberikan dalam panduan ini sini. Saya telah menyertakan ini di file build.gradle saya (dari aplikasi modul):

compileSdkVersion 'android-MNC'
buildToolsVersion '23.0.0 rc2'

Dalam file build.gradle proyek, saya telah menyertakan ini dalam dependensi saya:

classpath "com.android.tools.build:gradle:1.3.0-beta2"
classpath "com.android.databinding:dataBinder:1.0-rc0"

File tata letak persis sama dengan yang diberikan dalam panduan.

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
   <variable name="user" type="com.example.User"/>
</data>
<LinearLayout
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
   <TextView android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@{user.firstName}"/>
   <TextView android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@{user.lastName}"/>
</LinearLayout>
</layout>

Awalnya itu memberi kesalahan Element layout does not have the required attribute layout_width and layout_height.

Saya mencoba memperbaikinya dengan menetapkan match_parent ke keduanya. Lalu saya mendapat kesalahan Error parsing XML: duplicate attribute pada garis di mana saya ditugaskan layout_height dan layout_width ke tata letak linier.

Sekali lagi saya mencoba memperbaiki ini dengan menghapus atribut ini. Sekarang setiap kali saya mencoba mengkompilasi, saya melihat ini- error: package my.package.name.databinding tidak ada.

Penyelesaian kode berfungsi dengan sempurna di Fragmen saya di mana saya mencoba menggunakan tata letak ini.

Jadi, apa yang saya lewatkan?


32
2018-06-12 05:11


asal


Jawaban:


menghapus apply plugin: 'com.neenbedankt.android-apt' dari build.gradle saya memecahkan masalah saya.


17
2017-09-21 09:17



Binding Anda dalam file xml mungkin tidak valid.

Pastikan untuk memeriksa ulang

  1. Adalah type atribut referensi yang valid ke objek data? type="my.package.Class"
  2. Apakah pengikatannya valid? name="client" -> "@{client.field}"
  3. Apakah bidang data dapat diakses? public atau dienkapsulasi dengan getter
  4. Apakah nama bidang di java dan pencocokan file xml, periksa kesalahan ketik
  5. Jika Anda telah mengganti nama file xml, pastikan Anda juga memperbarui objek Binding. OldNameBinding -> NewNameBinding
  6. Proyek Bersih

19
2017-08-06 08:45



biasanya karena ada kesalahan dalam file tata letak XML Anda dan tidak dapat menghasilkan objek yang mengikat. Pastikan Anda menulis tipe data dengan benar, periksa lebih rendah atau lebih tinggi dari tulisan Anda.

    <data>
        <variable name="yourObject" type="com.example.simple.YourObject"/>
    </data>

Dan pastikan objek adalah panggilan yang benar:

    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{yourObject.name}"/>
    <TextView

3
2017-09-29 06:12



Ini tampaknya menjadi masalah di studio android. Editor akan menandainya sebagai kesalahan namun tetap akan dikompilasi.

Saya memiliki masalah yang sama dan jadi saya mengkloning contoh repo ini untuk menguji sistem saya dikonfigurasi dengan benar untuk mendukung penyatuan data https://github.com/mgrzechocinski/android-bindings-example

Abaikan peringatan kesalahan pada layout menandai. Ini salah.

Sesuatu yang saya perhatikan adalah Anda tidak perlu membutuhkan data tag jika hanya menggunakan penyatuan data untuk mendapatkan akses ke item tampilan melalui kelas BindingActivity yang dihasilkan.


1
2018-06-13 21:36



Jika Anda menggunakan plugin 'android-apt' untuk belati atau pustaka lain, setelah mengaktifkan pengikatan data, Anda harus menghapus plugin 'android-apt' dan menggunakan 'disediakan' alih-alih 'apt' di dependensi Anda. Misalnya jika Anda menggunakan belati, hapus ini

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'

dan ini

apply plugin: 'com.neenbedankt.android-apt' 

dan kemudian ganti

apt 'com.google.dagger:dagger-compiler:2.0'

dengan

provided 'com.google.dagger:dagger-compiler:2.0'

1
2017-12-24 06:55



Menurut versi sekarang panduan (2015-11-11) Anda hanya perlu menambahkan dua dependensi: Di file build.gradle proyek tambahkan dependensi gradle. Saat ini yang terbaru versi adalah 1.5.0-beta3

dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0-beta3'
    }

Dan dalam file build.gradle dari modul termasuk bagian dataBinding:

android{
  ...
  dataBinding {
        enabled = true
    }
  ...
}

Kesalahan

error: paket my.package.name.databinding tidak ada

mungkin ocurr karena ketidakcocokan antara xml dan kelas POJO


0
2017-11-11 14:59



Anda harus sangat berhati-hati agar anggota data kelas POJO Anda seharusnya public jika Anda tidak membuat setter setter.

Jika Anda memiliki POJO sederhana tanpa pengambil atau penyetel

public class User {
   public final String firstName;
   public final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
}

Jika Anda membuat pengambil setter, kelas gaya javaBean

public class User {
   private final String firstName;
   private final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
   public String getFirstName() {
       return this.firstName;
   }
   public String getLastName() {
       return this.lastName;
   }
}

0
2018-01-07 10:29



Dalam kasus saya, masalahnya adalah saya menambahkan layout_height dan layout_width ke layout tag dan juga ke tata letak root saya. Saya baru saja menghapus kedua atribut dari layout tag dan memecahkan masalah.


0
2018-03-13 04:54



Anda mungkin memiliki masalah atau ketidakcocokan antara model dan file tata letak Anda. Dalam kasus saya, saya memiliki:

...
<TextView
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_toLeftOf="@+id/photo"
            android:layout_toStartOf="@+id/photo"
            tools:text="0912454433"
            android:textStyle="bold"
            android:text="@{contact.cellPhoneNumber}"
            android:layout_below="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

tetapi kelas model saya seperti ini:

public class MyContact {
    public String name;
    public String cellphoneNumber; // <-- Notice the lowercase 'p'
}

0
2017-07-12 05:40