无法访问“FavoriteBottomDialogFragment”的超类型“androidx.lifecycle.HasDefaultViewModelProviderFactory”。检查你的模块

Posted

技术标签:

【中文标题】无法访问“FavoriteBottomDialogFragment”的超类型“androidx.lifecycle.HasDefaultViewModelProviderFactory”。检查你的模块分类【英文标题】:Cannot access 'androidx.lifecycle.HasDefaultViewModelProviderFactory' which is a supertype of 'FavoriteBottomDialogFragment'. Check your module cla 【发布时间】:2020-09-28 19:43:27 【问题描述】:

我在扩展 BottomSheetDialogFragment 的整个类中遇到错误

Cannot access 'androidx.lifecycle.HasDefaultViewModelProviderFactory' which is a supertype of 'FavoriteBottomDialogFragment'. Check your module classpath for missing or conflicting dependencies

该类在 app 模块中,该模块实现了另外两个模块:core 和presentation-core

build.gradle

dependencies 

     implementation fileTree(dir: 'libs', include: ['*.jar'])
     implementation project (':core')
     implementation project (':presentation-core')

     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.41"
     implementation 'androidx.appcompat:appcompat:1.1.0'
     implementation 'androidx.core:core-ktx:1.2.0'
     testImplementation 'junit:junit:4.12'
     implementation "com.google.android.material:material:1.1.0"

     //Rx
     implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
     implementation "io.reactivex.rxjava2:rxjava:2.2.9"
     //Architecture component
     implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
     implementation 'androidx.room:room-runtime:2.0.0'
     kapt 'androidx.room:room-compiler:2.0.0'
     kapt 'androidx.lifecycle:lifecycle-common-java8:2.0.0'
     implementation 'androidx.room:room-rxjava2:2.0.0'
     implementation 'androidx.room:room-guava:2.0.0'

     implementation 'androidx.recyclerview:recyclerview:1.1.0'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

     androidTestImplementation 'androidx.test.ext:junit:1.1.1'
 

核心依赖

dependencies 
     api fileTree(dir: 'libs', include: ['*.jar'])
     api "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61"
     api "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4"
     api 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.2'
     //library to serialize Java Objects between Contexts
     implementation 'org.parceler:parceler-api:1.1.11'
     kapt 'org.parceler:parceler:1.1.11'

     //testing dependencies
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'androidx.test.ext:junit:1.1.1'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
     testImplementation "org.mockito:mockito-core:2.24.5"
     androidTestImplementation "org.mockito:mockito-android:2.24.5"

     //architecture component
     implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
     implementation "androidx.lifecycle:lifecycle-livedata:2.0.0"

     //RxJava2
     implementation "io.reactivex.rxjava2:rxjava:2.2.9"
     implementation "io.reactivex.rxjava2:rxandroid:2.1.1"

演示核心

dependencies 
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'

BottomSheetDialogFragment

即使出现错误,我也可以在设备中运行项目

【问题讨论】:

我也遇到过这种情况。某处的检查或 Lint 规则中存在错误。我提交了a bug report,谷歌拒绝了。对于一些书籍样本,我最终升级到appcompat 的最新预发布 1.2.0 版本以解决这个问题。 是的,好像是这样的。将appcompat com.google.android.material:material 升级到1.3.0-alpha01 修复问题 我还通过将appcompat 升级到最新版本1.3.0-rc01 来消除此错误消息。但是,我不必升级 material 库。 【参考方案1】:

我今天遇到了同样的问题,并且能够解决。 原来问题是“失败”类所在的模块使用的androidx.lifecycle:lifecycle-viewmodel 的预期版本与其他一些依赖代码中的更高版本 版本之间的版本不匹配。

所以在我的例子中,我的模块使用的是该模块的版本 2.1.0,但其中一个依赖项使用的是版本 2.2.0。代码编译不会有问题,因为 gradle 将依赖解析为最新版本;然而,Android Studio 不知何故被这种情况弄糊涂了(并非总是如此,因为这种情况并非一直发生,但有时——这不是我第一次看到这种情况。)

因此解决方案是:找出该库的最新版本在您的应用中,并更新您的 build.gradle 以使该模块指向 gradle 正在解析的相同版本。或者:

    运行gradlew app:dependencies 搜索结果为lifecycle-viewmodel 在您的应用中更新 build.gradle 以依赖 lifecycle-viewmodel 使用 gradle 表示它正在解析的版本 将项目与 gradle 文件同步

【讨论】:

另外值得注意的是,我能够将其切换到 2.1.0 并且问题没有出现。【参考方案2】:

在我的情况下(一个 Android 模块),Android Studio 4.0.1,我在 IDE 中收到许多与 androidx.lifecycle.HasDefaultViewModelProviderFactory 相关的警告, 我已经通过将此行添加到 build.gradle 解决了这个问题:

implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

因此 build.gradle 的开头变为:

implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
...

【讨论】:

【参考方案3】:

在我的情况下,在问题类的模块中添加生命周期视图模型依赖项解决了问题。

【讨论】:

【参考方案4】:

使用实际版本将依赖项添加到您的 build gradle androidx.fragment:fragment-ktx:x.x.x 中。对于活动,您必须添加androidx.activity:activity-ktx:x.x.x。我希望这对您有所帮助,就我而言,它解决了问题。

【讨论】:

【参考方案5】:

我将以下几行添加到 build.gradle 以解决模块中的相同问题:

def archLifecycleVersion = '2.2.0'
implementation "androidx.lifecycle:lifecycle-extensions:$archLifecycleVersion"
kapt "androidx.lifecycle:lifecycle-compiler:$archLifecycleVersion"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$archLifecycleVersion"

【讨论】:

以上是关于无法访问“FavoriteBottomDialogFragment”的超类型“androidx.lifecycle.HasDefaultViewModelProviderFactory”。检查你的模块的主要内容,如果未能解决你的问题,请参考以下文章

如何解决win10无法访问\\

javaweb网页无法访问怎么解决

为何无法访问网站?

Linux系统下的80端口公网无法访问。

C盘 位置不可用,无法访问C:\ 拒绝访问

无法访问docker镜像服务器?