web-dev-qa-db-ja.com

ファイル '/activity_login.xml' DataBindingで重複クラスが見つかりました。BRは生成されていません

ほとんどの場合、AndroidデータバインディングBRの問題が発生します。常に単一のactivity.xmlがありますが、生成されたバインディングクラスにはエラーが表示されます。この問題を解決する方法を教えてください。

enter image description here

32
Dipendra Sharma

カスタムバインディングクラス名は私の問題を解決しました

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

ルームORMを使用している場合は、DAOの音を確認してください

例:

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

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

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


@Update
void update(Call call);//success databinding build
4
0 cęĥ

Room ORMを使用している場合、最近何らかの変更があった場合は確認してください。 SQLクエリの解析に問題があり、クエリの結果と完全に一致するメソッドの型も返されると、データバインディングに影響し、異常なエラーが表示される可能性があります。

同様の問題がありました:

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

ここに間違ったジェネリック型がありました。 ReasonEntityの代わりにReasonModelを使用する必要があり、取得に時間がかかります。

データバインディングに失敗する可能性がある別の問題は、Dagger DIについてです。プロジェクトでDIを使用している場合、注入されたすべてのクラスが...短剣によって提供またはバインドされていることを確認してください。

2
Siamak Ferdos

私は同じ問題を抱えていました。それは、未知のクラスの変数への参照があったためです

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

この間違いを直さなければなりませんでした。

2
djleop

Xmlにレイアウトを含めると、このエラーが発生する可能性があります。

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

xmlに別のレイアウトを含めるには、これに従ってください https://stackoverflow.com/a/38681418/18935

2

私の場合、それはDagger 2バージョンの問題でした。 2.17以降(今日の最新バージョンは2.20)は機能しませんでした。 2.16に戻すと、問題は解決しました。

これに関する議論をもっと見る こちら

2
Tanin

GradleプロパティにAndroid.databinding.enableV2 = trueを追加することでそれを実現しました。それはうまく働いていた。

2
Dipendra Sharma

私はこの重複エラーのうち37件を受け取っていましたが、それはすべて1つのレイアウトファイルのインポートが間違っていたためでした

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

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

私はすべてのレイアウトxmlファイルを開き、手動で確認することでそれを見つけました。ただし、手動で/ build/generated/data_binding ...に移動した場合でもエラーは存在しますが、エラー自体はまったく関係ありませんが、ビルドは失敗せず、エラーも警告も報告されません。

1
nGL

私の場合、問題はARouterがkotlinをあまりサポートしていないためです。@ Autowiredアノテーションを使用すると、ビルドに失敗し、dataBindingが見つかりません。

ファイルActivityLoginBinding。次に、@ Autowiredの前に@JvmFieldを追加します。

したがって、AndroidStuido conver JavaをKotlinに使用すると、この方法で生成されたKotinファイルに構文エラーが発生する可能性があります。Java静的関数、 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))
    } 
}

この答えがあなたの質問に答えることを願っています。私の英語はとても悪いです! ^ ^

1
志威梦

同じ問題がありました。私の場合、Roomを使用しており、Entityクラスにセッターメソッドを記述しませんでした。ケースもチェックインします。

ルーム永続性ライブラリを使用している場合は、コードについて再度確認してください。 İは同じ問題を抱えていて、私のコードを見て、見ました。部屋の永続性に関するこの問題。

最後に..İRoom Persistenceライブラリを使用しています。私はすべてのコードをチェックし、見つけました。部屋のモデルクラスを確認してください。

1
ozanurkan

私の場合、この問題は、Room ORMのEntityクラスで、プライベートフィールドのセッターとゲッターの名前がJava Bean命名規則と一致しなかったという事実が原因で発生しました。

1
Alektas

私はプロジェクトでKotlin + dagger + data bindingを使用しています。このアプローチは、dagger2バージョンに関係なく機能するはずです。

私の問題を修正するためにしたこと:

  1. gradle.propertiesファイルにAndroid.databinding.enableV2=falseを作成し、クリーン&リビルド

  2. dagger2の誤ったスコープに関連する実際のエラーを確認できました

  3. ダガーグラフとその他のインポートステートメントを修正しました

  4. Android.databinding.enableV2=trueに戻す

1
Sahitya Pasnoor

私の場合、ListArrayListに変更したために発生していました。 Listに戻すと、問題は解決しました。

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

私の場合、問題はbutterknifeに割り当てられたonclickメソッドのprivate修飾子が原因で、butterknifeに割り当てられたすべてのフィールドとメソッドがパブリックであることを確認してください

1
Islam Assem

この問題には多くの理由があります。このコマンドを試すことができます。働いた:)

gradlew build 
0
user5531997

私にとってkaptをannotationProcessorに置き換えました

annotationProcessor "com.Android.databinding:compiler:3.1.3"
0
dastan

また、これにつまずいて、いまいましい、それが起こるときそれは吸う。公正な方法、私はこれらの2つの方法に行きます:

  • バインディングが完全に生成されていないため、興味深いビルドエラー(ボイラープレートを生成しようとする部屋など)に到達しない場合があります。したがって、表示されるエラーの最大数について-Xmaxerrsフラグを増やす必要があります。

  • 私の場合、インスピレーションは別のAndroid St​​udioおよびGradleプラグインバージョンに切り替えるようになりました(AS 3.4、ベータチャンネルでは、実際のビルドエラーが発生しました)

0
Misca