En son stüdyo 3.6'da oluşturulmayan veri bağlama sınıfı


12

Bugün android stüdyom 3.5.3'ü 3.6'ya güncelledim. Şimdi, herhangi bir veri bağlama sınıfı üretemiyorum. Android stüdyo kendi kendine veri bağlama-iml dosyası oluşturur.

Herhangi biri böyle bir sorunla karşılaştı mı?

Kepçe sarıcı. Özellikleri:

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

Proje düzeyinde not dosyası:

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

Uygulama düzeyinde not dosyası:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'androidx.navigation.safeargs'
android {
 dataBinding {
        enabled = true
    }
    // Using Lambda Expressions
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

gradle.properties:

kotlin.code.style=official
android.databinding.enableV2=true
kotlin.incremental=true
kapt.incremental.apt=true

Etkinlik ve XML dosyalarım aşağıdadır: Etkinlik:

class ActivityMain : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        var binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
    }
}

XML:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <import type="android.view.View" />
     <!--   <variable
            name="loading"
            type="Boolean" />-->
        <variable
            name="bottomMenu"
            type="Boolean" />
        <variable
            name="clickListener"
            type="com.ecom.side_menu.SideMenuClickHandler" />
    </data>
    <androidx.drawerlayout.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:fitsSystemWindows="false"
        android:layout_height="match_parent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <include
                android:id="@+id/layToolbar"
                layout="@layout/layout_toolbar"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <androidx.fragment.app.FragmentContainerView
                android:id="@+id/splash_host"
                android:name="androidx.navigation.fragment.NavHostFragment"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:background="@android:color/white"
                app:defaultNavHost="true"
                app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/layToolbar"
                app:navGraph="@navigation/splash_graph" />

            <com.google.android.material.bottomnavigation.BottomNavigationView
                android:id="@+id/bottomNavigationView"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="0dp"
                android:layout_marginEnd="0dp"
                android:background="@color/colorPrimary"
                android:visibility="@{safeUnbox(bottomMenu) ? View.VISIBLE : View.GONE}"
                app:itemBackground="@color/colorPrimary"
                app:itemIconTint="@android:color/white"
                app:itemTextColor="@android:color/white"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:menu="@menu/menu_navigation_dashboard" />


         <!--   <include
                android:id="@+id/progressLayoutId"
                layout="@layout/layout_progress"
                android:visibility="@{safeUnbox(loading) ? View.VISIBLE : View.GONE}"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent" />-->

        </androidx.constraintlayout.widget.ConstraintLayout>

        <com.google.android.material.navigation.NavigationView
            android:id="@+id/navigationView"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="@android:color/white"
            android:fitsSystemWindows="true"
            android:visibility="visible">
            <include
                android:id="@+id/customDrawerList"
                app:clickListener="@{clickListener}"
                layout="@layout/drawer_list" />
        </com.google.android.material.navigation.NavigationView>

    </androidx.drawerlayout.widget.DrawerLayout>

</layout>

Resmi çözüm:

Google bu sorunu çözdü. Android Studio 3.6.2'nin yeni yamasıyla güncelledikten sonra, birden fazla kaynak seti ile veri tabanı sınıfı oluşturabiliyorum


Ben de stüdyo bugün güncelleme & & ayrıca veri bağlama sınıfları kullanın .. güzel çalışıyor kardeşim
Güzel umang

sadece önbellekleri geçersiz
kıl

@Niceumang Ben de önbellekleri geçersiz kılmaya çalıştım ve yeniden başlatmak, ben de inşa klasörü silmek için çalıştı .. Ama yine de aynı hata
Mehta

bağlama sınıfını oluşturduğunuz XML ve sınıfınızı gösterecek misiniz?
Güzel umang

@Niceumang sınıfı ve XML eklendi
Mehta

Yanıtlar:


6

Bu bana da oldu. Bağlanma sınıfları aslında üretilir. Proje iyi inşa ediyor. Sadece Android Studio 3.6.1 (veya temel Gradle derleme sistemi, umrumda değil) buggy ve bu sınıfları göremiyorum.

Bir ara çözüm olarak, kaynak setlerini hackledim (lütfen aşağıdaki parçadaki yapı varyantlarının projeme özel olduğunu unutmayın, yeniden yazmanız gerekir).

android {
    ...
    sourceSets {
        demoDebug {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/demoDebug/out'
        }
        fullDebug {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/fullDebug/out'
        }
        espressoDebug {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/espressoDebug/out'
        }
        demoRelease {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/demoRelease/out'
        }
        fullRelease {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/fullRelease/out'
        }
        espressoRelease {
            java.srcDirs += 'build/generated/data_binding_base_class_source_out/espressoRelease/out'
        }
    }
    ...
}

Yukarıda Steve'in işaret ettiği gibi: Bu arada Google'ın düzeltmesini sabırla beklemeliyiz ...

DÜZENLE

Ben sadece beklediğimden çok daha adamcağız, mizanpajlar da kırıldı fark ettim:

Lütfen sevgili Google: Bize dengesiz ara sürümleri yayınlamayın "

Umarım Google yakında bu karışıklığı giderir ...

DÜZENLEME 2

Android Studio 3.6'nın yukarıda açıklandığından daha fazla hata olduğunu tekrar fark ettim.

Mevcut Espresso testlerinin uygulanması da bozuldu.

Herkesi Android Studio 3.6'ya yükseltmekten kesinlikle vazgeçiriyorum.

Bu arada, muhtemelen Android Studio 3.5'e geri döneceğiz.


teşekkürler .. Bu kesmek iyi çalışıyor .. Şimdi Binding sınıfı oluşturabiliyorum.
Mehta

Evet, umarım google bu hatayı yakında çözer
Mehta

1
ancak yine de bağlayıcı değişkene
xml'de

Ne yazık ki, yukarıdaki
EDIT'te

5

Android studio 3.6.1'i ekledikten sonra çözdüğüm sorunu kullanıyorum viewBinding.enabled = true için android{de build.gradle:

android {

...
    dataBinding {
        enabled = true
    }
    viewBinding.enabled = true

işe yaradı, thx kardeşim
Fanadez

İşe yarıyor!! i veri eksik vardıBinding {etkin = doğru}
Billyjoker

4

Gradle sürümünüzü en son sürüme güncelleyin. Şuraya git:

Dosya> Proje Yapısı> Gradle Sürümü

Ve en son kararlı sürümü seçin (şu anda 6.3). Ayrıca Android Gradle Eklentisi Sürümünüzü de en son sürüme işaret ediyorsa kontrol edin.


Teşekkürler, benim durumumda bu yardım! +1
Tano

3

İçin AndroidStudio 3.6.1 , veya uygulama seviyesi için kod aşağıda ekleyebilir (: uygulaması) build.gradle . Benim sorunum bu satırı ekleyerek çözüldü, umarım senin de.

sourceSets {
     main {
          java.srcDirs += 'build/generated/data_binding_base_class_source_out/debug/out'
        }
    }

Jiří Křivánek tarafından önerildiği gibi, bahsettiğim çözümü ekledim ama şimdi, her değişken kırmızı alt çizgi ile görüntüleniyor .. erişemiyorum
Mehta

2

En son Android veri bağlama kitaplığında bir hata var gibi görünüyor. Projenin temizlenmesi işe yaramadı. Projeyi yeniden oluşturmak işe yaramadı. Önbellekleri geçersiz kılma ve yeniden başlatma işe yaramadı.

Benim için çalışan tek çözüm, veri bağlama sürümünü sürüm 2'den (Android Studio 3.6.1 ve sonraki sürümlerde yeni varsayılan) sürüm 1'e geri almaktı. Bunu yapmak için, TÜMÜNÜ geri almanıza gerek yoktur Android Studio. Bunun yerine şu satırı ekleyebilirsiniz gradle.properties:

android.databinding.enableV2=false

TLDR; Google'ın en son veri bağlama derleyicisi ile veri bağlama yapmamız gereken yolu tamamen yenilemeye karar verip vermediğini merak ediyorum. Ekibin YAS (yine başka bir sözdizimi) sağlamak için çalışıp çalışmadığı şaşırtıcı olmaz. Sonuçta, DataBindingUtil.inflate<MyClassBindingImpl>tüm bilgisayar programlamasında en tuhaf kullanım modellerinden biri olmak zorunda ve derleyicinin kodunuzda otomatik olarak oluşturulmuş sınıfa başvurabilmeniz için jenerik veri bağlama sınıfının somut bir uygulamasını otomatik olarak oluşturmasını gerektiriyor. BTW, bu yüzden araçlar Make Projectvar. Veri bağlama sözdiziminin kısa bir süre içinde tamamıyla yenilenmesini bekliyorum.


1

ben bu sorunu vardı çünkü benim düzenleri birkaç dizine ayrı vardı ve feryat gibi çakıl onları tanımlamak

sourceSets {
    main {
        res.srcDirs =
                [
                        'src/main/res', 'src/main/drawable/button_icons', 'src/main/res/drawable/button_icons',

                        'src/main/res', 'src/main/layouts/user', 'src/main/res/layouts/user',
                        'src/main/res/layouts', 'src/main/layouts/user', 'src/main/res/layouts/user/register',
                        'src/main/res/layouts', 'src/main/layouts/user', 'src/main/res/layouts/user/login',
                        'src/main/res/layouts', 'src/main/layouts/user', 'src/main/res/layouts/user/profile',
                        'src/main/res/layouts', 'src/main/layouts/user', 'src/main/res/layouts/user/wallet',

                        'src/main/res/layouts/splash_layouts', 'src/main/res/layouts', 'src/main/res',

                        'src/main/res/layouts/main_layouts', 'src/main/res/layouts', 'src/main/res',
                        'src/main/res/layouts/main_layouts/sellers', 'src/main/res/layouts/main_layouts', 'src/main/res/layouts',

                        'src/main/res/layouts/dashboard_layouts', 'src/main/res/layouts', 'src/main/res',

                        'src/main/res/layouts/basket_layouts', 'src/main/res/layouts', 'src/main/res',
                        'src/main/res/layouts/factor_layouts', 'src/main/res/layouts', 'src/main/res',

                        'src/main/res/layouts/setting_layouts', 'src/main/res/layouts', 'src/main/res',
                ]
    }

}

Bu yüzden tüm mizanpajları ana mizanpaj dizinine koydum ve diğer alt mizanpaj dizinlerini siliyorum


0

Projeyi yeniden oluşturmayı deneyin ve oluşturulan dosyalarda veri bağlama klasörünün kullanılabilir olup olmadığını görün


0

Bana da oldu. Bunun nedeni, AS 3.6.0'da android: id ile include etiketi kullanırsak başka bir modülden bağlanmaya erişemememizdir . Ben proje başarıyla çalıştırabilirsiniz çünkü bu hata IDE olduğunu düşünüyorum. Yapılması gereken tek şey düzeltmeyi beklemek veya sadece hatayı yok saymaktır.


0

Bana da oldu. Graddle sürümünü proje build.graddle dosyasında 3.6.0'a yükselttim ve şimdi tekrar çalışıyor.


0

Bu, Android studio 3.6.3 ile giderilmiş gibi görünüyor. olmasına rağmen

viewBinding.enabled = true

benim için de çalıştı

viewBinding {
    enabled = true
}

Android'de çalışmadığınızı doğrulayabilir3.6.3
Kartik Garasia

Lütfen buna bir bağlam verin. Bu kod nedir. Nereye gidiyor?
Stealth Haham
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.