web-dev-qa-db-ja.com

データバインディング:シンボルクラスBRが見つかりません

既存のプロジェクトでデータバインディングを使用しようとしましたが、ビルドできません。

プロジェクトでの使用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

8
yennsarah

カスタムオブジェクトで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&lt;Dice>" /> //don't forget the '>' after Dice
    </data>
2
yennsarah

あなたと同様のDataBindingでさまざまな問題が発生しました。たとえば、Android Studioは "MainActivityBinding"のような生成されたBindingクラスを見つけることができません。Android Studioは解決しました私のために。

BRクラスに関しては、見つからないという問題がありましたが、通常はレイアウトクラスでエラーが発生したことが原因でした。たとえば、存在しないフィールドへのバインディング。他のすべてが正しいことを確認してから、Android Studioを再起動してください。

6
Gober

更新後Android Studioバージョン2.3へおよびGradle 3.このエラーが発生し、解決策はこれをビルド.gradle(app)ファイル

apt 'com.Android.databinding:compiler:2.3.0'
4
Jorge Casariego

私は長い間データバインディングを使用していて、あなたにも役立ついくつかの重要なポイントを思いつきました。

この回答は、ViewDataBindingBindingResource(BR)クラスおよびViewDataBindingクラスのレイアウト変数を生成するのに役立ちます。

バインディングにとらわれないための6つのヒント。

(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> RebuildNot Build or Make project)。データバインディングクラスが生成されます。 (再構築は常に私のために魔法を行います。

(5)レイアウトに<variableを作成し、それがセッターとゲッターを表示しないデータバインディングにある場合クラス、次に4番目のポイントに従う

(6)それでもクラスが生成されない場合は、レイアウトファイルでビルドがエラーのために失敗していないかどうかを確認してください。データバインディングクラスは、ビルドが成功すると生成されます。

これが、データバインディングエラーを解決するために私が行うすべてのことです。さらに問題が発生した場合は、ここにコメントできます。

2
Khemraj

DataBindingで無関係なエラーが表示されることがありますが、私の場合、Gradleアプリファイルにapplyプラグイン: 'kotlin-kapt'を追加するのを忘れました。

1
Brian K.

エラーは実際にはデータバインディングが原因ではない可能性があります。 Javacはエラーログを切り捨てるため、実際の問題が表示されない場合があります。

このリンクをチェックしてください。 https://movieos.org/2017/Android-room-data-binding-compile-time-errors/

0

プロジェクトをAndroid xに変換してから、パッケージの下からBRクラスをインポートしますimport androidx.databinding.library.baseAdapters.BR

0
Rabiun Islam

私の場合、Android studioの上位バージョンでビルドされたプロジェクトからコードを更新しました。次に、Android studioを3.3.2からアップグレードします。 3.5.3に移行し、問題を解決します。

0
Sumit Kumar