既存のプロジェクトでデータバインディングを使用しようとしましたが、ビルドできません。
プロジェクトでの使用build.gradle
:
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.1'
//Data Binding Beta
classpath "com.Android.databinding:dataBinder:1.0-rc4"
classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.7+'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
申請中
apply plugin: 'com.Android.databinding'
apply plugin: 'com.neenbedankt.Android-apt'`
およびモジュール内:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
apt 'com.Android.databinding:compiler:1.0-rc1+'
}
RecyclerView/Fragment/ViewHolder/Adapterでデータバインディングを使用しようとしました。Android Studio1.4.1を使用します。compileSdkVersion23およびbuildToolsVersion "23.0.1"を使用します。aptなしで使用しました。さまざまなgradleバージョン、クラス/ xmlの校正..私はまだButterknife(プロジェクトが大きすぎてすべてを一度に変更できないため)および他の(ただし関連性のない)ライブラリも使用しています。プロジェクトを同期して再構築し、閉じたり開いたりしました= Android Studio、キャッシュを無効にしようとしました。最初から「新しい」例を作成しましたが、正常に機能しました。
「データクラス」のgetterメソッドは@Bindableです。
また、データバインディングパッケージは作成されません。 (エラーメッセージはそれが存在しないことを示しています)そしてError:cannot generate view binders Java.lang.StringIndexOutOfBoundsException: String index out of range: -21
カスタムオブジェクトでObservableList
を使用しようとすると、ほぼ毎回Error:cannot generate view binders Java.lang.StringIndexOutOfBoundsException: String index out of range: -21
エラーが発生しました。しかし、ほとんどの場合、タイプの後に>
を忘れていることがわかりました。愚かな私。だから、私の解決策はそれをチェックすることでした:
<data>
<import type="Android.databinding.ObservableArrayList"/>
<variable
name="dices"
type="ObservableArrayList<Dice>" /> //don't forget the '>' after Dice
</data>
あなたと同様のDataBindingでさまざまな問題が発生しました。たとえば、Android Studioは "MainActivityBinding"のような生成されたBindingクラスを見つけることができません。Android Studioは解決しました私のために。
BRクラスに関しては、見つからないという問題がありましたが、通常はレイアウトクラスでエラーが発生したことが原因でした。たとえば、存在しないフィールドへのバインディング。他のすべてが正しいことを確認してから、Android Studioを再起動してください。
更新後Android Studioバージョン2.3へおよびGradle 3.このエラーが発生し、解決策はこれをビルド.gradle(app)ファイル
apt 'com.Android.databinding:compiler:2.3.0'
私は長い間データバインディングを使用していて、あなたにも役立ついくつかの重要なポイントを思いつきました。
この回答は、ViewDataBinding
、BindingResource(BR)
クラスおよびViewDataBinding
クラスのレイアウト変数を生成するのに役立ちます。
(1)build.gradle
にデータバインディングを有効にするが必要です。そうでない場合は、これとSyncを追加します。
Android {
...
dataBinding {
enabled = true
}
...
}
(2)データバインディングクラスを生成する場合は、xml layout
をデータバインディングでラップ(<layout
タグ)。このようなもの。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android">
<Android.support.constraint.ConstraintLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent">
</Android.support.constraint.ConstraintLayout>
</layout>
(3)これで、データバインディングクラスが生成されます。
レイアウト名がスネークケース
activity_main.xml
の場合、データバインディングクラスはキャメルケースActivityMainBinding
のように生成されます。
ActivityMai...
と入力すると、提案は表示されませんと入力することがありますが、意味はありませんクラスは生成。その場合、予想される生成されたクラスのフルネームを入力する必要があります。タイプActivityMainBinding
と同様にインポートポップアップが表示されます。 (それは私が何度も直面したことです。)
(4)それでもクラスが生成されない場合。 (レイアウトファイルを貼り付けると、それが発生することがあります)。次にRebuild Project from Build> Rebuild
(Not Build or Make project)。データバインディングクラスが生成されます。 (再構築は常に私のために魔法を行います。)
(5)レイアウトに<variable
を作成し、それがセッターとゲッターを表示しないデータバインディングにある場合クラス、次に4番目のポイントに従う。
(6)それでもクラスが生成されない場合は、レイアウトファイルでビルドがエラーのために失敗していないかどうかを確認してください。データバインディングクラスは、ビルドが成功すると生成されます。
これが、データバインディングエラーを解決するために私が行うすべてのことです。さらに問題が発生した場合は、ここにコメントできます。
DataBindingで無関係なエラーが表示されることがありますが、私の場合、Gradleアプリファイルにapplyプラグイン: 'kotlin-kapt'を追加するのを忘れました。
エラーは実際にはデータバインディングが原因ではない可能性があります。 Javacはエラーログを切り捨てるため、実際の問題が表示されない場合があります。
このリンクをチェックしてください。 https://movieos.org/2017/Android-room-data-binding-compile-time-errors/
プロジェクトをAndroid xに変換してから、パッケージの下からBRクラスをインポートしますimport androidx.databinding.library.baseAdapters.BR
私の場合、Android studioの上位バージョンでビルドされたプロジェクトからコードを更新しました。次に、Android studioを3.3.2からアップグレードします。 3.5.3に移行し、問題を解決します。