Kotlin-android: çözülmemiş referans veri bağlama


143

Java'da yeni veri tabanı kitaplığını kullanarak aşağıdaki parça sınıfını yazdım

import com.example.app.databinding.FragmentDataBdinding;

public class DataFragment extends Fragment {

    @Nullable
    private FragmentDataBinding mBinding;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false);
        return mBinding.getRoot();
    }
}

Derler ve iyi çalışır.
Kotlin'de yeniden yazmaya çalıştım ve aşağıdakileri buldum:

import com.example.app.databinding.FragmentDataBdinding

class ProfileFragment : Fragment() {

    private var mBinding: FragmentDataBinding? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)
        return mBinding!!.getRoot()
    }
}

Ama şimdi adım :app:compileDebugKotlinaşağıdakileri çıktılar:

Hata: (16, 38) Çözümlenmemiş referans: veri bağlama
Hata: (37, 27) Çözümlenmemiş referans: FragmentDataBinding

Kotlin ile android-veri tabanı kütüphanesini nasıl kullanabilirim?

Üst düzeyim build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.android.databinding:dataBinder:1.0-rc4'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Benim build.gradleapp dir (sadece ilgili parçalar):

apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
apply plugin: 'kotlin-android'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

buildscript {
    ext.kotlin_version = '0.14.451'
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}
repositories {
    mavenCentral()
    maven {
        url 'http://oss.sonatype.org/content/repositories/snapshots'
    }
}

Android Studio 1.4, Derleme araçları sürüm 23.0.1, Android SDK 23, SDK araçları 24.4.0 kullanıyorum


3
Lütfen ilgili sorun için oy kullanmaktan çekinmeyin: https://youtrack.jetbrains.com/issue/KT-8007
Ghedeon

1
Yalnızca apply plugin: 'kotlin-kapt'en son sürümde uygulama derecelendirme dosyasına sahip olmanız gerekir .
Hesam

özel lateinit var ciltleme: FragmentDataBinding İlklendirmenin daha iyi bir yoludur
Dino Sunny

Yanıtlar:


85

Bu yapılandırmayı kullanmayı deneyin:

Ana olarak build.gradle :

buildscript {
    ext.kotlin_version = '<kotlin-version>'
    ext.android_plugin_version = '2.2.0-alpha4'
    dependencies {
        classpath "com.android.tools.build:gradle:$android_plugin_version"
    //... rest of the content
    }
}

App build.gradle :

android {
    dataBinding {
        enabled = true
    }
}

dependencies {
    kapt "com.android.databinding:compiler:$android_plugin_version"
}

kapt {
    generateStubs = true
}

1
@Irampazzo, 2.2.0-alphaXkullanılabilir ve FYI veri bağlama sürümü android-gradle-eklentisi ile aynıdır. böylece bu sürümü dışa aktarabilir ve derleyicinin sürümü olarak kullanabilirsiniz.
Avinash R

1
Bu cevabın veri bağlama ve kotlin ile ilgili sorunumu çözdüğünü doğrulayabilirim
Rabie Jradi

12
apply plugin: 'kotlin-kapt'Ayrıca eklemek zorunda kaldım . Bkz. Stackoverflow.com/a/42974558/1916449
arekolek

Bunu denedim. Şimdi bana dairesel bir bağımlılık hatası veriyor. Bunun hakkında bir fikrin var mı?
leoOrion

Check out kotlinlang.org/docs/tutorials/... bu konuda resmi belgeler için.
Brian

72

Yeni bir çözüm buldum, umarım sana yardımcı olur.

Öncelikle eklentinin uygulanıp uygulanmadığını kontrol edin:

apply plugin: 'kotlin-kapt'

sonra

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

Bağımlılıkta bir hata olabilir:

KULLANIM

kapt 'com.android.databinding:compiler:3.0.1'

onun yerine

compile 'com.android.databinding:compiler:3.0.1'

Yeni sürüm için burayı ziyaret edebilirsiniz

Teşekkür ederim.


6
Hala bu problemim var :(
Mladen Rakonjac

Bu benim için çalışıyor (kepçe sarıcı 4.4, araçlar 3.1.0)
Sergio

Kapt 'com.android.databinding ekleme: derleyici: 3.0.1' benim için çalışıyor
Duran Jayson

Benim için sadece "eklenti uygula:" kotlin-kapt "ekleyerek çalıştı. Teşekkürler.
Subhan Ali

yeni ekledi bu çizgi benim için çalışıyor (eklenti uygulayın: 'kotlin-kapt') Android Studio 3.2.1 - Kotlin eklentisi 1.3.0
Mohamed ElSawaf

14

Güncelleme 2: Bu gerçekten eski bir cevap, bunun yerine lrampazzo'nun cevabına bakın.

1.0-rc4 ile çalışır, koymak

kapt 'com.android.databinding:compiler:1.0-rc4' 

bağımlılıklarına

Yorumlardaki bağlantı için teşekkürler Ghedeon

Güncelleme : İşte gerçekten basit bir merhaba dünya örnek projesi


Hala aynı hatayı alıyorum, burada yanlış bir şey mi yapıyorum? gist.github.com/xdgimf/820c433efa8307821788
Miguel Fermin


@Jaydeep Sadece denedim ve işe yarıyor. Ancak Android stüdyosu sözdizimini vurgulamaz ve mesajla çok sayıda IDE hatası üretir Exception while analyzing expression at (12,23) in /projectpath/KotlinDataBinding/app/src/main/java/com/example/kotlindatabinding/MainActivity.kt:. Aynı hatalarınız mı var? Peki android stüdyo versiyonun nedir?
Mikhail

Bu önce rapor edilmiş @Arkadiy youtrack.jetbrains.com/issue/KT-8007 BTW ben stüdyo v1.5 Önizleme 2 kulüpler
Jaydeep Solanki

Bu artık eklentinin en son sürümü değil. Gereksiz acıya neden olur.
Avinash R

13

Veri Bağlama derleyicisinin sürümü proje build.gradle dosyanızdaki sınıf sürümüyle aynı:

// at the top of file 
apply plugin: 'kotlin-kapt'


android {
  dataBinding.enabled = true
}

dependencies {
  kapt "com.android.databinding:compiler:3.0.0-beta1"
}

ve sürüm sürümü

classpath 'com.android.tools.build:gradle:3.0.0-beta1'

İşte kotlin'de veri tabanı kütüphanesinin kullanımını tamamlamak için örnek bir bağlantı.

https://proandroiddev.com/modern-android-development-with-kotlin-september-2017-part-1-f976483f7bd6


dataBinding.enabled = trueunuttuğum şey buydu
Cesar Castro

7

Sorunu çözmek için,

apply plugin: 'kotlin-kapt'

build.gradle (Module: app) 'nin en üstünde, bu satırı bağımlılıklara koyun

kapt "com.android.databinding:compiler:[YOUR_ANDROID_PLUGIN_VERSION]"

Android eklentisinin sürümünü menüye giderek bulabilirsiniz

File > Project Structure > Project

Sonra tekrar senkronize edin. Bu uyarıyı görürseniz dikkate almayın.

Üçüncü taraf Gradle eklentileri bunun nedeni olabilir


6

Avustralyalı stüdyo 2.0 (2.1)

In build.gradle

android{
   dataBinding {
        enabled = true
    }
...
}
dependencies {
 kapt 'com.android.databinding:compiler:2.0.0-rc1'
....
}

kapt {
    generateStubs = true
}

Projemde: buildToolsVersion = "23.0.3"

üst düzeyde build.gradle

dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
    }

2
hem derleyici hem de android derleme araçları gradle eklentisi için aynı sürümü kullanmalısınız. Aksi takdirde öngörülemeyen derleme sorunlarına neden olabilir.
Avinash R

Eklenti eklemek zorunda kaldım: 'kotlin-kapt'
Andrii Kovalchuk

6

androidStudio ver3.1.3 benim için bu çalışma

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

kullanım örneğini göster


4

Kotlin'de yapılandırma verisi bağlama

build.gradle (klasör uygulaması)

apply plugin: 'kotlin-kapt'

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

dependencies {
   // data binding
   kapt "com.android.databinding:compiler:3.1.3"
}

Kotlin'in tadını çıkarın ...


eklenti uygulayın: 'kotlin-kapt' Kotlin'de gerçekten önemlidir.
Rahul Rastogi

3

Önemli Güncelleme

Android belgelerinde görebilirsiniz .

Sürüm 3.2'deki yeni derleyici varsayılan olarak etkindir.

Yani sadece güncelleyin sizin V3.2 Android Studio veya daha yeni . ve gereksiz tüm yapılandırmaları kaldırın.

Uygulama düzeyinde dataBinding özelliğini etkinleştirmeniz yeterlidir build.gradle.

android {
    dataBinding {
        enabled = true
    }
}

Sizin için her şeyi otomatik olarak yapacak.

Aşağıdaki satırları GÜVENLE KALDIRABİLİRSİN-

  • Databinding.compiler öğesini kaldır

    kapt 'com.android.databinding:compiler:3.0.1'
  • Kaldırmak kapt

    kapt {
        generateStubs = true
    }

Komple yapılandırmam

build.gradle (Proje)

kotlin_version = '1.2.71'    
classpath 'com.android.tools.build:gradle:3.2.0'

Gradle son sürümünü kullanın . Kotlin son sürümünü kullanın .

build.gradle (Uygulama)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

compileSdkVersion 28
targetSdkVersion 28

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

Önemli Yapılandırmayı yalnızca kopyalayıp yapıştırmayın. Kotlin versiyonunu ayarlamak için bu cevaba bakınız .

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

Projem hala 3.0.1 sürümünde, bu yüzden bu benim için işe yaramadı.
naqi

Daha fazla kararlılık elde etmek için Android Studio'nuzu ve sürümünüzü güncelleyebilirsiniz.
Khemraj

3

Benim durumumda, hata Unresolved reference: RegisterationUserBindingsadece düzen adımı fragment_registeration_userböyle kullandım FragmentRegisterationUserBindingve Veritabanları düzeninde yaptım ve hata gitti.


Harikasın! Sorunu çözmek için birden fazla öneri uygulamak için çok zaman harcadım, ancak bu cevabı bulana kadar çaresizdim. Bağlamanın parça düzeni adına göre değiştirilmesi sorunu çözer. Çok teşekkürler.
Ajay

size yardımcı oldu sevindim
EL TEGANI MOHAMED HAMMAD GABIR

2

İçinize aşağıdakileri ekleyin app build.gradle

kapt "com.android.databinding:compiler:$android_plugin_version"
apply plugin: 'kotlin-kapt' // This one at top where plugin belong to

Bu hile yapacak.

$android_plugin_versionsürümüdür com.android.tools.build:gradleiçindeapplication build.gradle

Ayrıca, bunu modülünüze ekleyin build.gradle

android { /// Existing Code kapt { generateStubs = true } }


0

Kotlin dilini kullandığınızda kullanarak Android Project'te Veritabanını ekleyin.

Aşağıdaki adımlar

- İlk önce aşağıdaki eklentiyi eklemeniz gerekir

**apply plugin: 'kotlin-kapt'**

--İkinci dataBinding etkin true

**dataBinding {
        enabled = true
    }**

Tüm bu nokta "SYNC ŞİMDİ" isabet sonra app.build.gradle eklendi

Örneğin, profil etkinliği düzenleme sonra kotlin bağlama değişkeni nasıl tanımlanır ??

lateinit var buildProfileBinding: ActivityBuildProfileBinding

buildProfileBinding = getBinding()

Burada, olsun bağlama hangi tür bağlama nesnesi işlemek için bir yöntemdir

protected <T extends ViewDataBinding> T getBinding() {
                return (T) binding;
            }

DataBinding Librabry kapt 'com.android.databinding: derleyici: 2.3.1'
Shripal Shah

0

Benim durumumda,

kapt {
    generateStubs = true
}

Sorunu benim için çözdü. İlk kez görmezden geldim, sorunla alakasız olduğunu düşündüm:

Çözülmemiş referans veri bağlama

Ama şimdi, veri bağlama gayet iyi çalışıyor.


0

Kendi sürekliliğimi paylaşmak istiyorum. Android Studio'da Kotlin ile veri veritabanını kullanmak yeterlidir

dataBinding {
    enabled = true
}

Bundan sonra "senkronize et" ve "Proje yapmak" çok önemlidir. Bundan sonra tüm nesneleriniz aktif olacak.


0

FragmentDetailsBinding'ı kullanmaya çalışmadan önce, "" etiket üstündeki tüm düzeni sararak ve tüm xmlns'leri düzen etiketine taşıyarak ilgili düzeni (fragment_details.xml) veri bağlama düzenine dönüştürdüğünüzden emin olmalısınız.


-1

Tüm veri bağlama bağımlılıklarından çıkın ve bunun yerine bunu kullanın

android {
    dataBinding {
        enabled = true
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.