2016-05-02 66 views
3

我在我的Android項目中使用綁定機制。在2.0版之前使用Android Gradle插件時,所有工作都很好。無法生成視圖綁定器java.util.NoSuchElementException與Android Gradle插件2.1

由於幾天我可以升級到2.1版的Android Gradle插件。當我升級時,我得到以下例外:

java.lang.RuntimeException: failure, see logs for details. 
cannot generate view binders java.util.NoSuchElementException 
     at java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1113) 
     at java.util.TreeMap$KeyIterator.next(TreeMap.java:1169) 
     at android.databinding.tool.store.SetterStore$1.compare(SetterStore.java:82) 
     at android.databinding.tool.store.SetterStore$1.compare(SetterStore.java:60) 
     at java.util.TimSort.countRunAndMakeAscending(TimSort.java:324) 
     at java.util.TimSort.sort(TimSort.java:189) 
     at java.util.TimSort.sort(TimSort.java:173) 
     at java.util.Arrays.sort(Arrays.java:659) 
     at java.util.Collections.sort(Collections.java:217) 
     at android.databinding.tool.store.SetterStore.getMultiAttributeSetterCalls(SetterStore.java:473) 
     at android.databinding.tool.BindingTarget.resolveMultiSetters(BindingTarget.java:203) 
     at android.databinding.tool.LayoutBinder.<init>(LayoutBinder.java:238) 
     at android.databinding.tool.DataBinder.<init>(DataBinder.java:52) 
     at android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:83) 
     at android.databinding.tool.CompilerChef.sealModels(CompilerChef.java:168) 
     at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:149) 
     at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:82) 
     at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:154) 
     at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:139) 
     at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:66) 
     at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:793) 
     at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:722) 
     at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1700(JavacProcessingEnvironment.java:97) 
     at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1029) 
     at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1163) 
     at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1108) 
     at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:824) 
     at com.sun.tools.javac.main.Main.compile(Main.java:439) 
     at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:132) 
     at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:45) 
     at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:33) 
     at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:103) 
     at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:52) 
     at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38) 
     at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:34) 
     at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:25) 
     at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:157) 
     at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:139) 
     at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:93) 
     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:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) 
     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:244) 
     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220) 
     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:231) 
     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209) 
     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) 
     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) 
     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) 
     at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) 
     at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) 
     at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) 
     at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52) 
     at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) 
     at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) 
     at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 
     at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203) 
     at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185) 
     at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66) 
     at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50) 
     at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25) 
     at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110) 
     at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37) 
     at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) 
     at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23) 
     at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43) 
     at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) 
     at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) 
     at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30) 
     at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154) 
     at org.gradle.internal.Factories$1.create(Factories.java:22) 
     at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) 
     at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52) 
     at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151) 
     at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32) 
     at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99) 
     at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93) 
     at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) 
     at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62) 
     at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93) 
     at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82) 
     at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94) 
     at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28) 
     at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) 
     at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43) 
     at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28) 
     at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75) 
     at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45) 
     at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51) 
     at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28) 
     at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43) 
     at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:170) 
     at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237) 
     at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210) 
     at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35) 
     at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24) 
     at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206) 
     at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169) 
     at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) 
     at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) 
     at org.gradle.launcher.Main.doAction(Main.java:33) 
     at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54) 
     at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35) 
     at org.gradle.launcher.GradleMain.main(GradleMain.java:23) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30) 
     at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129) 
     at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61) 

在頂部有一個對日誌文件的引用,但我不知道哪一個。並且沒有提及我的項目中有任何錯誤的文件。

有沒有人有任何想法是什麼問題或如何解決這個錯誤?

+0

它在註釋處理期間拋出。你在使用任何不尋常的註釋嗎? –

+0

不是我所知道的。但我的項目很大。如果沒有指針去哪裏尋找,它會在乾草堆裏尋找一根針。 –

回答

1

顯然有些事情已經改變與事件和數據綁定有關。 到目前爲止,我發現這些綁定不遷移後工作搖籃2.1

1)的EditText和onTextChanged:

不工作SINCE搖籃2.1:

<EditText android:onTextChanged="@{binding.onTextChanged}" /> 

public void onTextChanged(CharSequence s, int start, int before, int count) {} 

THE FIX FOR EDITTEXT & & TEXTWATCHER:

<EditText android:addTextChangedListener="@{binding.onTextChanged}" /> 

public TextWatcher onTextChanged = new SimpleTextWatcher() { 
    @Override 
    public void onTextChanged(String newBasic) {} 
} 

2)SeekBar和onProgessChanged:

NOT WORKING SINCE搖籃2.1:

<SeekBar android:onProgressChanged="@{viewModel.onSeekbarProgressChanged}" /> 

public void onSeekbarProgressChanged(@NonNull View _view, int progress, boolean _fromUser) {} 

THE FIX FOR搜索條& & PROGESSCHANGED:

<SeekBar android:onSeekBarChangeListener="@{viewModel.seekbarChanged}" /> 

public SeekBar.OnSeekBarChangeListener seekbarChanged = new SimpleProgressChanged() { 
    @Override 
    public void onProgressChanged(final int progress) { 
     .... your code 
    } 
}; 

凡SimpleTextWatcher:

public abstract class SimpleTextWatcher implements TextWatcher { 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) {} 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

    @Override 
    public void afterTextChanged(Editable s) { 
     onTextChanged(s.toString()); 
    } 

    public abstract void onTextChanged(String newValue); 
} 

而SimpleProgressChanged:

public abstract class SimpleProgressChanged implements SeekBar.OnSeekBarChangeListener { 

    public abstract void onProgressChanged(int progress); 

    @Override 
    public void onProgressChanged(final SeekBar seekBar, final int progress, 
     final boolean fromUser) { 
     onProgressChanged(progress); 
    } 

    @Override 
    public void onStartTrackingTouch(final SeekBar seekBar) {} 

    @Override 
    public void onStopTrackingTouch(final SeekBar seekBar) {} 
} 
+0

我無法重現此錯誤。你能提供一個只有其中一個失敗的小樣本嗎? –

2

與Android 2.1工作室3預覽發佈,Android的數據綁定現在有2路數據綁定。

爲了讓您結合雙向你只需要添加一個角色:

=

編輯文本:

單向綁定

<TextView android:text="@{user.firstName}" .../> 

雙向裝訂

<EditText android:text="@={user.firstName}" .../> 

尋求酒吧

單向綁定

<SeekBar android:progress="@{viewModel.angle}" .../> 

雙向綁定

<SeekBar android:progress="@={viewModel.angle}" .../> 

無需設置監聽等這只是工作

The only place I've found documentation is on this is at George Mount's (Android Engineer) blog.