web-dev-qa-db-ja.com

「エラー:ビューバインダーJava.lang.NullPointerExceptionを生成できません」の考えられる理由

Android Studio for my Androidプロジェクト)を使用しています。奇妙なスタックトレースでビルドがクラッシュすると、次のような問題が発生しました:

Error:Execution failed for task ':app:compileDevDebugJavaWithJavac'.
 Java.lang.RuntimeException: failure, see logs for details.
  cannot generate view binders Java.lang.NullPointerException
    at Android.databinding.tool.reflection.ModelMethod.isBoxingConversion(ModelMethod.Java:155)
    at Android.databinding.tool.store.SetterStore.isBetterParameter(SetterStore.Java:946)
    at Android.databinding.tool.store.SetterStore.getBestSetter(SetterStore.Java:838)

そして、データバインディングが全体的に壊れたように思われました。

以前にリファクタリングを行い、クラスをパッケージ間で移動しました。

21
atlascoder

私の場合、Android Studioを使用してパッケージ間でクラスの名前を変更したり移動したりしました。ただし、type要素のvariable属性でリファクタリングされたクラスへの参照があったレイアウトのXMLの修正は進みませんでしたdata内。

そのため、私の以前のタイプの値は、存在しないファイルを指し、ビルドがクラッシュしました。

単純な間違いですが、ソースを見つけるのに時間がかかる場合があります。これが誰かを助けることを願っています。

26
atlascoder

xmlバインディングで参照するすべてのクラスを必ずインポートしてください

私は次のようなコードを持っていました:

Android:visible="@{obj instanceof A}"

同じエラーが発生しました。

クラスAが最上位にインポートされなかったことがわかります。 <import type="com.company.A">タグを追加することで問題は解決しました。

P.S。 Android:visibleは、私が持っているカスタムバインディングアダプターです

6
Daniel Shatz

私の場合、私の問題はLongClickListenerにあり、このリスナーのメソッドはbooleanを返したはずですが、私のメソッドはvoidを返したので、正しいreturnステートメントを追加するとうまくいきました。大丈夫。

データバインディングメソッドを使用する場合は、正しい値を返す必要があります。そうでない場合、スローするエラーはまったく役に立ちません。

2
pouya

Android Xに移行した後、この質問に出くわした可能性があります。その場合、XMLファイルは大丈夫ですが、それでも問題が解決しない場合は、ライブラリを調べてください。コードを生成します。

コードを生成するライブラリは、Jettifyerでは簡単に変換できません。ここにいくつかの情報- https://blog.danlew.net/2018/11/14/the-reality-of-migrating-to-androidx/

私の場合、明らかなものを更新しましたが、まだ何かが足りませんでした。したがって、私がしたことは、私の開発ブランチ(Android Xではない))に移動し、ビルドを実行して、ビルドフォルダーに掘り込み、コードを生成したすべてのライブラリーを確認しました。私はそうしました。この問題の原因となっている依存関係が見つかるまで、容疑者を1つずつ確認することができました。更新するか、私の場合は削除して、このエラーを解決できました。:)

1
AdamMc331

getter関数 xmlファイルから参照するインスタンスが定義されていないか、getter関数が含まれていない可能性がありますpublicアクセス指定子。

1
senthil kumar

このように変数を定義すると、この問題に直面します(Android Studioは何も警告しません)

<data>
    <variable
        name="onGlobalLayoutA"
        type="ViewTreeObserver.OnGlobalLayoutListener"/>

    <import type="Android.view.ViewTreeObserver"/>
</data>

そして、私はsolveそれによって

<data>
    <variable
        name="onGlobalLayoutA"
        type="Android.view.ViewTreeObserver.OnGlobalLayoutListener"/>
</data>

これが誰かを助けることを願っています。

0
Phan Van Linh

私の場合、その理由は、別のモジュールである変数の型を使用しており、そのモジュールがビルドスクリプトの「実装」として追加されているためです。 「api」に変更すると問題が解決しました。

明らかに、atlascoderによって投稿された問題と同じ問題ではありませんが、私は関係なく言及します。おそらく、誰かが私と同じ問題を抱えてこの記事をgitします。

0
zsolt világos

Android Gradleプラグインを3.5.1にダウングレードすると問題が解決しました

@ hiddeneyes02が言及したように、これはAndroid Gradleプラグインを3.5.1から3.5.2にアップグレードすると発生します。これはバグのようです: https://issuetracker.google .com/issues/143778134

コマンドツールを使用してプロジェクトをビルドすると、この投稿と同じエラーが発生しました: Building Android project with Android Gradle Plugin v 。3.5.2ビルドが失敗する

0
kotlinski