Android studio Databinding 报 different providers 错误

这个问题我和同事3台电脑都会出现,应该不是个别情况,但是 Google 看起来并没有发现这个严重的问题,可能 Databinding 的使用者比较少吧。

环境

  • Android studio 3.1 和 3.2 版本

  • Gradle 4.4

  • gradlePlugin 3.1.x - 3.2.x

  • model 依赖:

     android {
         compileSdkVersion 27
         buildToolsVersion "27.0.3"
         defaultConfig {
             applicationId "com.xxj.mvvm.demo.android_mvvm_demo"
             minSdkVersion 22
             targetSdkVersion 27
             versionCode 1
             versionName "1.0"
             testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
         }
         buildTypes {
             release {
                 minifyEnabled false
                 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
             }
         }
         dataBinding {
             enabled = true
         }
     }
    

操作步骤

  1. 把 activity_main.xml 转换为 Databinding 布局
  2. 在 Activity 中使用 DataBindingUtil 实例化,这时没有问题,代码提示正常,Ctrl 点击 ActivityMainBinding 可成功导航到 xml 文件
    ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    
  3. 然后 make/build project(工具栏小锤子)
  4. 发现 ActivityMainBinding 没有代码提示,也无法导航到 xml 布局,studio右下角有报错。

错误信息如下:

    Element: class com.intellij.psi.impl.source.xml.XmlFileImpl because: different providers: SingleRootFileViewProvider{myVirtualFile=file://C:/Users/52492/AndroidStudioProjects/MyOpenProject/Android-MVVM-Demo/app/src/main/res/layout/activity_main2.xml, content=VirtualFileContent{size=1789}}(1b3cefd9); SingleRootFileViewProvider{myVirtualFile=file://C:/Users/52492/AndroidStudioProjects/MyOpenProject/Android-MVVM-Demo/app/src/main/res/layout/activity_main2.xml, content=VirtualFileContent{size=1789}}(3501664b)
        invalidated at: see attachment
        com.intellij.psi.PsiInvalidElementAccessException: Element: class com.intellij.psi.impl.source.xml.XmlFileImpl because: different providers: SingleRootFileViewProvider{myVirtualFile=file://C:/Users/52492/AndroidStudioProjects/MyOpenProject/Android-MVVM-Demo/app/src/main/res/layout/activity_main2.xml, content=VirtualFileContent{size=1789}}(1b3cefd9); SingleRootFileViewProvider{myVirtualFile=file://C:/Users/52492/AndroidStudioProjects/MyOpenProject/Android-MVVM-Demo/app/src/main/res/layout/activity_main2.xml, content=VirtualFileContent{size=1789}}(3501664b)
            invalidated at: see attachment
            at com.intellij.psi.util.PsiUtilCore.ensureValid(PsiUtilCore.java:502)
            at com.intellij.psi.impl.smartPointers.SmartPointerManagerImpl.createSmartPsiElementPointer(SmartPointerManagerImpl.java:78)
            at com.intellij.psi.impl.smartPointers.SmartPointerManagerImpl.createSmartPsiElementPointer(SmartPointerManagerImpl.java:69)
            at com.intellij.psi.impl.smartPointers.SmartPointerManagerImpl.createSmartPsiElementPointer(SmartPointerManagerImpl.java:64)
            at com.intellij.codeInsight.completion.JavaPsiClassReferenceElement.<init>(JavaPsiClassReferenceElement.java:49)
            at com.intellij.codeInsight.completion.AllClassesGetter.createLookupItem(AllClassesGetter.java:170)
            at com.intellij.codeInsight.completion.JavaClassNameCompletionContributor.createClassLookupItems(JavaClassNameCompletionContributor.java:237)
            at com.intellij.codeInsight.completion.JavaCompletionUtil.createLookupElements(JavaCompletionUtil.java:521)
            at com.intellij.codeInsight.completion.JavaCompletionUtil.processJavaQualifiedReference(JavaCompletionUtil.java:310)
            at com.intellij.codeInsight.completion.JavaCompletionUtil.processJavaReference(JavaCompletionUtil.java:277)
            at com.intellij.codeInsight.completion.JavaCompletionContributor.lambda$addReferenceVariants$7(JavaCompletionContributor.java:451)
            at com.intellij.codeInsight.completion.LegacyCompletionContributor.processReference(LegacyCompletionContributor.java:125)
            at com.intellij.codeInsight.completion.LegacyCompletionContributor.processReferences(LegacyCompletionContributor.java:108)
            at com.intellij.codeInsight.completion.JavaCompletionContributor.addReferenceVariants(JavaCompletionContributor.java:437)
            at com.intellij.codeInsight.completion.JavaCompletionContributor.fillCompletionVariants(JavaCompletionContributor.java:263)
            at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:83)
            at com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:149)
            at com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:142)
            at com.intellij.codeInsight.completion.JavaNoVariantsDelegator.fillCompletionVariants(JavaNoVariantsDelegator.java:61)
            at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:83)
            at com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:149)
            at com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:142)
            at com.intellij.codeInsight.completion.JShellCompletionContributor.fillCompletionVariants(JShellCompletionContributor.java:28)
            at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:83)
            at com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:149)
            at com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:142)
            at com.intellij.codeInsight.template.impl.LiveTemplateCompletionContributor$2.addCompletions(LiveTemplateCompletionContributor.java:90)
            at com.intellij.codeInsight.completion.CompletionProvider.addCompletionVariants(CompletionProvider.java:36)
            at com.intellij.codeInsight.completion.CompletionContributor.fillCompletionVariants(CompletionContributor.java:152)
            at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:83)
            at com.intellij.codeInsight.completion.CompletionService.performCompletion(CompletionService.java:112)
            at com.intellij.codeInsight.completion.CompletionProgressIndicator.calculateItems(CompletionProgressIndicator.java:839)
            at com.intellij.codeInsight.completion.CompletionProgressIndicator.access$600(CompletionProgressIndicator.java:92)
            at com.intellij.codeInsight.completion.CompletionProgressIndicator$1CalculateItems.run(CompletionProgressIndicator.java:821)
            at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1130)
            at com.intellij.codeInsight.completion.AsyncCompletion.tryReadOrCancel(CompletionThreading.java:181)
            at com.intellij.codeInsight.completion.CompletionProgressIndicator.lambda$startCompletion$6(CompletionProgressIndicator.java:832)
            at com.intellij.codeInsight.completion.AsyncCompletion.lambda$null$0(CompletionThreading.java:108)
            at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:157)
            at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:543)
            at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:488)
            at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94)
            at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:144)
            at com.intellij.codeInsight.completion.AsyncCompletion.lambda$startThread$1(CompletionThreading.java:104)
            at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:315)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
            at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            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)

这个错误困扰了我半年多了没法解决(自己菜),然后到 IDEA 社区找到了这个

Strange behaviour after update to 2017.3 when editing primefaces xhtml files

我看见这位大哥和我报错的关键字相同,我就看了一下,发现最初的 studio 3.1 版本就是基于 IDEA 2017.3 的(studio 3.0 基于 2017.1),所以我在项目中同时使用 config.gradle 和 Databinding 在 studio 3.0 运行正常,在 3.1 3.2 版本直接爆炸。

嗯,然后我就把这个 bug 归结为 IDEA 的更新导致 studio 上出了这个问题,社区中说这个 bug 已经在后面版本中解决,然而 studio 的高级版本还是没法使用。

最后

困扰多时的问题终于在 studio 3.3 版本解决了,但是现在 3.3 版本还是预览版,想使用 Databinding 的同学可以去下载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,270评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,672评论 2 59
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,380评论 2 44
  • 可能天生的我就是怯弱的,不敢向中心去,就是不敢。所以,我又是鼓起了多大的勇气才敢勇敢的告诉你,我的心意。又是多大的...
    糖糖糖糖媛阅读 319评论 0 0
  • 本文原创。仅限站内转载,站外转载请私信联系作者。 笔者由于工作的原因,会经常穿梭于多伦多downtown的金融街。...
    尘世小书虫阅读 611评论 0 0