簡體   English   中英

Android 數據綁定:package 不存在

[英]Android Databinding : package does not exist

我正在嘗試使用 Android 的數據綁定。

我不能再構建我的項目了。 我收到此錯誤:

“錯誤:(13、46)錯誤:package ch.company.project.databinding 不存在”

這是我的gradle

http://pastebin.com/dkXd1Mxr

http://pastebin.com/n9hkFWGQ

這里是 gradle output:

https://pastebin.com/w93Rausg

感謝伊吉特!

問題不是直接鏈接到 Android 數據綁定。 項目中存在錯誤(某些變量未正確設置)

我建議將 gradle 與“--debug 和--stacktrace”一起使用以獲取更多信息,它有很大幫助。

早些時候我的包名稱是“com.xyz.abc.Models”將包名稱更改為所有小寫​​字母“Models”->“models”

解決了這個問題。

錯誤不是數據綁定包,而是語法或邏輯錯誤。 例如,您的 POJO 中有屬性“lastName”,但在布局中它是android:text="@{user.lastname}"

檢查您的“布局”並進行重建項目。

我對接受的答案不滿意,它告訴您在沒有提示的情況下進行堆棧跟蹤。

以下是導致此問題的一些可能原因。 檢查您是否沒有執行以下任何操作。

基本上Android DataBinding沒有那么成熟 如果沒有適當的錯誤,它將失敗很多次。

因此,如果您遇到諸如package ch.company.project.databinding does not exist"類的問題package ch.company.project.databinding does not exist"

失敗的可能原因:

  • 首先,一一檢查最近編輯的布局xml是否有錯誤(對於錯誤的importsvariables )。 在這種情況下,我通常不會得到正確的錯誤。

  • 檢查布局元素中綁定塊 ({...}) 中的數據綁定語法是否有錯誤。 在一種布局中工作后始終重建(而不是構建)項目。

  • 檢查您的@BindingAdapter方法是否具有正確的參數。 例如imageUrl綁定適配器將接受ImageViewView作為第一個參數。

  • 在一種布局中完成工作后,您應該始終重建項目。

  • 如果您無法通過上述步驟找到錯誤--debug and --stacktrace在編譯選項中嘗試--debug and --stacktrace

    File> Settings> Build, Execution, Deployment> Compiler> Command-line Options

確保您的包名稱以小寫字母開頭。 在我的情況下,經過兩個小時的斗爭后問題解決了

在此處輸入圖片說明

包名應以小寫字母開頭。 例如活動是錯誤的,它會給出一個錯誤而不是重構->重命名活動

我的項目有類似的問題

你可以試試:

  • 檢查 xml 文件是否有導致構建失敗的錯誤
  • 清潔工程
  • 文件——使緩存無效/重新啟動

在我的特殊情況下,我使用的是 Dagger 2。這個包錯誤出現在很多類中,與原始錯誤沒有任何關系:依賴注入錯誤。

快樂提醒:在您的堆棧跟蹤中滾動更多內容以了解真正的問題是什么。

我被同樣的錯誤困了幾個小時。 在嘗試了 stackoverflow 的幾種解決方案后,我使用穩定的 gradle 依賴項更新了我的項目。

仍然沒有解決,但是具有相同的 gradle 依賴項DataBinding在我的另一個項目中運行良好。

所以,我使用資源管理器去項目文件夾並刪除了2 個東西。

  1. 構建文件夾
  2. .idea/libraries 中的所有文件

之后我同步了項目,它繼續工作得很好。

我得到了錯誤:

錯誤:(9, 46) 錯誤:包 com.company.www.bar.databinding 不存在。

我只是刪除“=”符號。 它對我有用

由此 :

 <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@={()->activity.onButtonClick()}"/>

到 :

<Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{()->activity.onButtonClick()}"/>

確保您在布局中引用的模型字段具有public訪問修飾符

改變

{ databinding = true}

buildFeatures{
     dataBinding = true
    
}

要消除此錯誤,只需將完整的布局設計包含在activity_main.xml文件中的普通布局標記中。

在尋找解決方案上浪費了很多時間后,這對我有用。 試一試。

如果你試過這個步驟

  1. 無效/重啟`
  2. 將此屬性保留在gradel.properties 中
android.databinding.enableV2=false
android.enableExperimentalFeatureDatabinding=true

並檢查所有 xml 文件看起來不錯。 那么你應該使用這個解決方案,在項目級別 build.gradle 中添加以下代碼

    allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xmaxerrs" << "1000"
        }
    }
}

這會給你確切的錯誤,你有實際的錯誤解釋:上面的代碼會增加編譯錯誤的大小

包名必須開始小寫字母 否則,綁定庫無法理解它是類還是包。 此外,您不需要用小寫字母來完成所有操作。

示例,錯誤用法:

package com.programmerbrain.activity.ContactInfo; //Problem is ContactInfo, 'C'.

示例,真正的用法:

package com.programmerbrain.activity.contactInfo; //Solution is contactInfo, 'c'.

就我而言,我遵循 android 文檔:

buildFeatures {
    viewBinding true
}

使用“=”代替空格

buildFeatures {
    viewBinding = true
}

嘗試按照Refactor -> migrate to androidx

並在build.grade(:app)

implementation 'androidx.appcompat:appcompat:1.0.0'

或者

implementation 'androidx.databinding:databinding-runtime:1.0.0'

如果您遇到這個問題是因為您在 Android Studio Artic Fox 中切換到 JDK11 並且您的視圖綁定在 UI 中中斷但在執行期間沒有中斷,那么請注意這是一個已知問題,應該在 Bumble Bee 中解決:

https://issuetracker.google.com/issues/180946610

當前的修復是切換回 JDK8(或安裝 Bumble Bee 金絲雀版本)。

確保如果您的布局文件名以以下格式命名: <name>_activity.xml ,則您的綁定類名稱也符合以下格式: <name>ActivityBinding

對我來說,將我的布局文件名從activity_login.xml更改為login_activity.xml解決了這個問題,因為我的綁定類名稱是LoginActivityBinding

這是Android 布局和綁定表達式頁面中提到的一個例外:

為每個布局文件生成一個綁定類。 默認情況下,類的名稱基於布局文件的名稱,將其轉換為 Pascal 大小寫並為其添加 Binding 后綴。 上面的布局文件名是activity_main.xml 所以對應的生成類是ActivityMainBinding

如果您在布局中使用 model,請確保您沒有 model 和 package 名稱應以小寫字母開頭。

我將我的從 Model>Model.class 更改為 modelPac>Model.class

就我而言,問題出現在我創建productFlavors並設置sourceSets時。 改變

sourceSets {
    develop {
        res.srcDirs = ['myApp/src/develop/res']
    }

sourceSets {
    develop {
        res.srcDirs = ['src/develop/res']
    }
}

解決了我的問題。

希望這會對某人有所幫助。 在我的例子中,我使用的是 ZoomImageView,我在 Java 文件中編程並在 XML 中使用。當我將我的項目遷移到另一個項目時。 package 名稱已更改,我將相同的 xml 文件復制到新項目。 這引起了沖突。

我變了

<com.coremacasia.okk.utility.ZoomImageView
    android:id="@+id/zoomImage"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<in.theclink.clink.utility.ZoomImageView
    android:id="@+id/zoomImage"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM