Дублирующий класс, найденный в файле '/activity_login.xml' DataBinding, BR не создается

Я в основном застрял в привязке к данным по привязке к андроиду. Существует единственный файл activity.xml, но только сгенерированный класс привязки, показывающий ошибку. Пожалуйста, дайте мне знать, как решить эту проблему.

enter image description here

Ответ 1

Пользовательское имя класса привязки разрешило мою проблему

<data class="ContactItem">
    …
</data>

Ответ 2

Если вы используете Room ORM, проверьте свой DAO clazz

Пример:

@Update String update (Call call);//ошибка

@Update
long update(Call call);//fail

@Update
int update(Call call);//success databinding build


@Update
void update(Call call);//success databinding build

Ответ 3

Я бы это сделал, добавив android.databinding.enableV2 = true в свойствах Gradle. Он работал нормально.

Ответ 4

Если вы используете Room ORM, просмотрите их, если вы недавно изменили некоторые. Любая проблема при анализе SQL запросов, а также возвращаемый тип метода, который должен полностью соответствовать результату запроса, может повлиять на привязку данных и показать ненормальные ошибки.

У меня была похожая проблема:

@Query("SELECT * from NotSellingReason where NotSellReasonId > 0")
    List<ReasonModel> getUnvisitingReasons();

У меня был неправильный общий тип. Я должен использовать ReasonEntity вместо ReasonModel и для его получения требуется много времени!

Еще одна проблема, которая может привести к сбою привязки данных, - о Dagger DI. Если вы используете DI в своем проекте, убедитесь, что все введенные классы,... предоставляются или связаны кинжалом.

Ответ 5

В моем случае это была проблема с версией Dagger 2. 2.17 и выше (последняя версия на сегодня - 2.20) не работала. Переход на 2.16 решил проблему для меня.

Больше обсуждений об этом здесь

Ответ 6

Вы можете получить эту ошибку, когда включите макет в XML.

<include layout="@layout/any_layout" />

чтобы включить другой макет в ваш XML, следуйте этой fooobar.com/questions/259635/...

Ответ 7

У меня была та же проблема, и это было потому, что у меня была ссылка на переменную неизвестного класса

<variable name="handler" type="com.example.org.UnknownClass" />

Мне просто пришлось исправить эту ошибку.

Ответ 8

В моем случае эта проблема была вызвана тем фактом, что в классе Entity Room ORM имена setter и getter частного поля не совпадали с соглашением об именах java bean.

Ответ 9

В моем случае это происходило, потому что я изменил List на ArrayList; Проблема устранена, когда она вернулась к List;

 @Query("SELECT * FROM " + PurchaseConstants.TABLE_NAME + " ORDER BY purchaseTime DESC")
    List<Purchase> getAllPurchases();

Ответ 10

У меня такая же проблема. В моем случае я использовал Room, и я не писал метод setter в классе Entity. Поэтому вы также проверяете свое дело.

Ответ 11

в моем случае проблема была из-за закрытого модификатора для метода onclick, назначенного с помощью butterknife, убедитесь, что все поля и методы, назначенные с помощью butterknife, являются общедоступными

Ответ 12

В моем случае проблема заключалась в том, что ARouter не очень хорошо поддерживает kotlin - когда я использую аннотацию @Autowired, сборка завершилась неудачно, и подсказки dataBinding не найдены, дубликат класса найден в

файл ActivityLoginBinding。 Затем добавьте @JvmField перед @Autowired , Он работает и успешно работает。

поэтому , когда вы используете AndroidStuido, конвертируйте Java в Kotlin , Будьте осторожны generated Файлы Kotin, созданные таким образом, могут иметь синтаксические ошибки. Это может быть некоторая статическая функция Java, аннотация @bindingadapter в привязке данных, преобразованная в kotlin, и вы получите Ошибка. Решите это, и все готово

например в Java

 @BindingConversion
    public static String converStr(CommonUser user) {
        return user.getAge() + user.getName() + user.isSingle();
    }

    //同上,不需要显示因如何调用,在xml中即可使得textview有一个 bg 的属性,app命名空间的,
    @BindingAdapter({"bg"})
    public static void randomName(TextView tv, String color) {
        tv.setTextColor(Color.parseColor(color));
    }

когда использовать это в kotlin, как это:

//this is root node in the kotlin file ,no {} 
@BindingAdapter("srlEnableRefresh")
fun randomName( tv:TextView, color:String) {
    tv.setTextColor(Color.parseColor(color))
}

или же

object Tools{
   @JvmStatic
    @BindingAdapter("srlEnableRefresh")
    fun randomName( tv:TextView, color:String) {
        tv.setTextColor(Color.parseColor(color))
    } 
}

Я надеюсь, что этот ответ отвечает на ваш вопрос. Мой английский очень плохой! ^ ^

Ответ 13

Я получил 37 из этих повторяющихся ошибок, и все это было из-за неправильного импорта в 1 файле макета

    <import type="android.view.View"/>

    <variable
        name="viewModel"
        type="wrong.package.name.SViewModel"/>

Я нашел его, открыв все мои файлы макета XML и проверив его вручную. Сама ошибка была совершенно не связана, так как она по-прежнему существует, если я вручную перехожу в /build/generate/data_binding..., но сборка больше не дает сбоя, и нет сообщений, ошибок или предупреждений.

Ответ 14

Я использую Kotlin + Dagger + привязку данных в моем проекте. Этот подход должен работать независимо от версии dagger2.

Что я сделал, чтобы исправить мою проблему:

  1. made android.databinding.enableV2=false в файле gradle.properties и очистить и восстановить

  2. удалось увидеть фактическую ошибку, связанную с неверной областью действия dagger2

  3. Исправлен мой график кинжала и другие операторы импорта

  4. установить обратно в android.databinding.enableV2=true

Ответ 15

для меня заменил kapt на annotationProcessor работал

annotationProcessor "com.android.databinding:compiler:3.1.3"

Ответ 16

Есть много причин для этой проблемы. Вы можете попробовать эту команду. работал:)

gradlew build 

Ответ 17

О, эта ошибка настолько плохая и трудно найти решение... Мое решение было в классе Entity. должен установить var вместо val для Feilds и быть решенным, наконец :)

Ответ 18

Тоже наткнулся на это и блин, это отстой, когда это происходит. Честно говоря, я бы пошел этими двумя путями:

  • поскольку привязка сгенерирована не полностью, вы можете не попасть к интересным ошибкам сборки (например, к комнате, пытающейся сгенерировать ее в качестве примера), поэтому вам следует увеличить флаг -Xmaxerrs для максимального количества отображаемых ошибок

  • в моем случае пришло вдохновение перейти на другую версию плагина Android Studio и Gradle (в AS 3.4, бета-канал, я получил реальные ошибки сборки)

Ответ 19

если вы используете библиотеку постоянства помещения, проверьте еще раз код. Я получил ту же проблему и после просмотра моего кода, и я увидел. Этот вопрос о стойкости комнаты.

Наконец... Я использую библиотеку Room Persistence, я проверяю весь код и нашел. Проверьте свой класс модели комнаты.