DataBinding не работает в Android Studio 2.3, его нельзя преобразовать в android.databinding.tool.expr.StaticIdentifierExpr

после обновления Android Studio 2.3 сегодня, сборка моего проекта не удалась.

при сборке проекта gradle консоль показывает эту ошибку:

FAILURE: Build failed with an exception.

What went wrong:
Execution failed for task ':app:compileChildrenDebugJavaWithJavac'.
 java.lang.RuntimeException: failure, see logs for details.
cannot generate view binders java.lang.ClassCastException: android.databinding.tool.expr.IdentifierExpr cannot be cast to android.databinding.tool.expr.StaticIdentifierExpr
    at android.databinding.tool.expr.ExprModel.staticIdentifier(ExprModel.java:194)
    at android.databinding.tool.expr.ExprModel.addImport(ExprModel.java:352)
    at android.databinding.tool.expr.ExprModel.staticIdentifierFor(ExprModel.java:270)
    at android.databinding.tool.expr.FieldAccessExpr.replaceStaticIdentifier(FieldAccessExpr.java:270)
    at android.databinding.tool.expr.FieldAccessExpr.resolveType(FieldAccessExpr.java:256)
    at android.databinding.tool.expr.Expr.getResolvedType(Expr.java:359)
    at android.databinding.tool.expr.Expr.unwrapChildTo(Expr.java:887)
    at android.databinding.tool.expr.Expr.unwrapObservableFieldChildren(Expr.java:873)
    at android.databinding.tool.expr.Expr.getResolvedType(Expr.java:353)
    at android.databinding.tool.expr.Expr.unwrapChildTo(Expr.java:887)
    at android.databinding.tool.expr.Expr.unwrapObservableFieldChildren(Expr.java:873)
    at android.databinding.tool.expr.Expr.getResolvedType(Expr.java:353)
    at android.databinding.tool.BindingTarget.resolveMultiSetters(BindingTarget.java:214)
    at android.databinding.tool.LayoutBinder.<init>(LayoutBinder.java:249)
    at android.databinding.tool.DataBinder.<init>(DataBinder.java:52)
    at android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:88)
    at android.databinding.tool.CompilerChef.sealModels(CompilerChef.java:187)
    at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:184)
    at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:86)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:189)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:174)
    at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:79)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
    at com.sun.tools.javac.main.Main.compile(Main.java:523)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
    at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
    at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:46)
    at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:33)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:104)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:53)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38)
    at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:35)
    at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:25)
    at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:206)
    at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:187)
    at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:130)
    at com.android.build.gradle.tasks.factory.AndroidJavaCompile.compile(AndroidJavaCompile.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:163)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:123)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:95)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:76)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:55)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:236)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:228)
    at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:61)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:228)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:215)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:77)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:58)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)


Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

используйте версию поддержки 25.3.0

версия инструментов сборки 25.0.2

скомпилировать версию SDK 25

проект использует apt вместо annotationProcessor.

любая помощь приветствуется!


person LoongWind CM    schedule 18.03.2017    source источник
comment
Какова ваша подходящая линия для привязки данных?   -  person George Mount    schedule 19.03.2017


Ответы (4)


Проверьте макет xml; Я пытался использовать java.lang.String в своем макете в качестве переменной, и это вызывало ту же проблему.

person Brandon    schedule 07.10.2017

попробуйте удалить static из методов преобразования:

import androidx.databinding.InverseMethod;

public class Conv {

    public Double toDoubleAmount(String amount) {
        return Double.parseDouble(amount);
    }

    @InverseMethod("toDoubleAmount")
    public String toStringAmount(Double amount) {
        return amount == null ? "" : amount.toString();
    }
}
person L.Grillo    schedule 12.02.2020

С новой привязкой данных + kotlin иногда легко забыть, что импортированный макет не является макетом inflated в вашем fragment или activity

Например, в настоящее время я поднимаю экран под названием SettingsFragment, а макет называется fragment_settings, мой новый экран называется SettingsFragmentV2, и я импортировал:

import kotlinx.android.synthetic.main.fragment_settings.*

вместо import kotlinx.android.synthetic.main.fragment_settingsv2.*

Поскольку новая привязка основана на FragmentSettingsV2Binding, а не на FragmentSettingsBinding, это вызвало у меня class cast exception.

person azwethinkweiz    schedule 10.09.2020

Я добавил представление импорта в xml, и проблема решена <import type="android.view.View" />

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<data>

    <import type="android.view.View" />//i miss this line

    <variable
        name="model_name"
        type="com.model.ModelClassName" />

</data>

<View
android:visibility='@{(model_name.list!=null &amp;&amp;  
model_name.list.size>0)?View.VISIBLE:View.GONE}'
/>
....
<layout/>
person varotariya vajsi    schedule 22.12.2020