web-dev-qa-db-ja.com

データバインディングを備えた部屋注釈プロセッサ

既存のコードでデータバインディングを使用しましたが、永続化のためにRoomに移行しています。 Florina's Blog forroomに記載されている手順に従いました

部屋の依存関係を削除すると、コードはJavaコードエラーまたはBR関連のエラーなしで正常にビルドされます

 annotationProcessor 'Android.Arch.persistence.room:compiler:1.0.0'

そしてそれも実行されますが、database_Implが存在しないというランタイム例外が発生します。それはそのファイルを生成できなかったので。

しかし、注釈プロセッサを元に戻した後、それは私に与えます

 Error:(29, 37) error: cannot find symbol class BR

使用しているgradleプラグインはcom.Android.tools.build:gradle:3.0.1

彼らは両方とも一緒に働いていないようです

これまでに行った手順:

  1. BaseObservableをObservableに変更 ここで提案されているように
  2. Android Studioを3.0.1に更新
  3. Gradle最新プラグインカナリア6を使用してみました
  4. クリア、キャッシュのクリアも行われます

RoomとDataのバインディングを一緒に使用した人はいますか?

8
DeeshaV

4日間の努力の後、私はついにコードを適切に実行させました。解決する手順

データバインディングエラーのようなエラー:パッケージcom.packagename.databindingが存在しませんエラー:シンボルクラスCustomMainActivityBindingが見つかりません

デフォルトで発生する100を超えるエラーを表示するには、アプリのgradleに以下のコードを追加する必要があります

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

データバインディングとRoomArchコンポーネントのGradle依存関係

annotationProcessor 'com.Android.databinding:compiler:3.0.1'

implementation 'Android.Arch.lifecycle:extensions:1.0.0'
implementation 'Android.Arch.persistence.room:runtime:1.0.0'
annotationProcessor 'Android.Arch.lifecycle:compiler:1.0.0'
annotationProcessor 'Android.Arch.persistence.room:compiler:1.0.0'

注:Gradleプラグインのバージョンは3.0.1です

Observableを実装して呼び出すようにすべてのVMを変更しました

registry.notifyChange(this, BR.bar);

変更を通知し、オーバーライドされたメソッドを実装する場合

@Override
public void addOnPropertyChangedCallback(OnPropertyChangedCallback    
callback) {
registry.add(callback);
}

@Override
public void removeOnPropertyChangedCallback(
OnPropertyChangedCallback callback) {
registry.remove(callback);
}

これらのことでコードがビルドされましたが、ルームクエリ関連のエラーを解決すると例外なく実行されました。これが主な理由でした。コードはビルドされていましたが、実行されていませんでした。これらのエラーは、プロジェクトを再びRebuidしたときに表示されました。

更新:

Android studio 3.1.の後、Messageウィンドウが消え、すべてのビルドエラーが下に表示されますBuildビュー。エラーのテキストビュー応答を取得するために使用できるトグルがありますが、データバインディングエラーの場合はそれだけでは不十分です。

私を助けた解決策:

  1. コマンドプロンプト/ターミナルで、プロジェクトルートに移動します。
  2. Macの場合はこのコマンド「./gradlewbuild--stacktrace」を実行し、Windowsの場合は「。\ gradlewbuild--stacktrace」を実行します。
  3. ここで「error:」タグを検索すると、コンパイル時のエラーが表示されます。

IDEでこれらのエラーを取得できませんでした。

10
DeeshaV

私の経験では、次の理由でエラーが発生する可能性があります。

  1. ゲッター/セッターが正しくありません(名前がないか間違っています)
  2. Daoの戻り値の型が正しくありません
  3. annotationProcessorまたはkaptの問題
  4. デフォルトのコンストラクターはオーバーライドされます(Roomの空のコンストラクターを保持する必要があります)
0
gevge