ほとんどの場合、AndroidデータバインディングBRの問題が発生します。常に単一のactivity.xmlがありますが、生成されたバインディングクラスにはエラーが表示されます。この問題を解決する方法を教えてください。
カスタムバインディングクラス名は私の問題を解決しました
<data class="ContactItem">
…
</data>
ルーム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
Room ORMを使用している場合、最近何らかの変更があった場合は確認してください。 SQL
クエリの解析に問題があり、クエリの結果と完全に一致するメソッドの型も返されると、データバインディングに影響し、異常なエラーが表示される可能性があります。
同様の問題がありました:
@Query("SELECT * from NotSellingReason where NotSellReasonId > 0")
List<ReasonModel> getUnvisitingReasons();
ここに間違ったジェネリック型がありました。 ReasonEntity
の代わりにReasonModel
を使用する必要があり、取得に時間がかかります。
データバインディングに失敗する可能性がある別の問題は、Dagger DIについてです。プロジェクトでDIを使用している場合、注入されたすべてのクラスが...短剣によって提供またはバインドされていることを確認してください。
私は同じ問題を抱えていました。それは、未知のクラスの変数への参照があったためです
<variable name="handler" type="com.example.org.UnknownClass" />
この間違いを直さなければなりませんでした。
Xmlにレイアウトを含めると、このエラーが発生する可能性があります。
<include layout="@layout/any_layout" />
xmlに別のレイアウトを含めるには、これに従ってください https://stackoverflow.com/a/38681418/18935
私の場合、それはDagger 2バージョンの問題でした。 2.17以降(今日の最新バージョンは2.20)は機能しませんでした。 2.16に戻すと、問題は解決しました。
これに関する議論をもっと見る こちら
GradleプロパティにAndroid.databinding.enableV2 = trueを追加することでそれを実現しました。それはうまく働いていた。
私はこの重複エラーのうち37件を受け取っていましたが、それはすべて1つのレイアウトファイルのインポートが間違っていたためでした
<import type="Android.view.View"/>
<variable
name="viewModel"
type="wrong.package.name.SViewModel"/>
私はすべてのレイアウトxmlファイルを開き、手動で確認することでそれを見つけました。ただし、手動で/ build/generated/data_binding ...に移動した場合でもエラーは存在しますが、エラー自体はまったく関係ありませんが、ビルドは失敗せず、エラーも警告も報告されません。
私の場合、問題は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))
}
}
この答えがあなたの質問に答えることを願っています。私の英語はとても悪いです! ^ ^
同じ問題がありました。私の場合、Roomを使用しており、Entity
クラスにセッターメソッドを記述しませんでした。ケースもチェックインします。
ルーム永続性ライブラリを使用している場合は、コードについて再度確認してください。 İは同じ問題を抱えていて、私のコードを見て、見ました。部屋の永続性に関するこの問題。
最後に..İRoom Persistenceライブラリを使用しています。私はすべてのコードをチェックし、見つけました。部屋のモデルクラスを確認してください。
私の場合、この問題は、Room ORMのEntityクラスで、プライベートフィールドのセッターとゲッターの名前がJava Bean命名規則と一致しなかったという事実が原因で発生しました。
私はプロジェクトでKotlin + dagger + data bindingを使用しています。このアプローチは、dagger2バージョンに関係なく機能するはずです。
私の問題を修正するためにしたこと:
gradle.propertiesファイルにAndroid.databinding.enableV2=false
を作成し、クリーン&リビルド
dagger2の誤ったスコープに関連する実際のエラーを確認できました
ダガーグラフとその他のインポートステートメントを修正しました
Android.databinding.enableV2=true
に戻す
私の場合、List
をArrayList
に変更したために発生していました。 List
に戻すと、問題は解決しました。
@Query("SELECT * FROM " + PurchaseConstants.TABLE_NAME + " ORDER BY purchaseTime DESC")
List<Purchase> getAllPurchases();
私の場合、問題はbutterknifeに割り当てられたonclickメソッドのprivate修飾子が原因で、butterknifeに割り当てられたすべてのフィールドとメソッドがパブリックであることを確認してください
この問題には多くの理由があります。このコマンドを試すことができます。働いた:)
gradlew build
私にとってkaptをannotationProcessorに置き換えました
annotationProcessor "com.Android.databinding:compiler:3.1.3"
また、これにつまずいて、いまいましい、それが起こるときそれは吸う。公正な方法、私はこれらの2つの方法に行きます:
バインディングが完全に生成されていないため、興味深いビルドエラー(ボイラープレートを生成しようとする部屋など)に到達しない場合があります。したがって、表示されるエラーの最大数について-Xmaxerrsフラグを増やす必要があります。
私の場合、インスピレーションは別のAndroid StudioおよびGradleプラグインバージョンに切り替えるようになりました(AS 3.4、ベータチャンネルでは、実際のビルドエラーが発生しました)