AndroidX Room 未解決のスーパータイプ RoomDatabase 質問する

AndroidX Room 未解決のスーパータイプ RoomDatabase 質問する

アプリをビルドしようとすると、次のコンパイル エラーが発生しました:

Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath:
com.example.persistence.AppDatabase, unresolved supertypes: androidx.room.RoomDatabase

永続性の設定は別の Android モジュール (永続性) にあります。

ビルド

// Kotlin StdLib
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

// Room
implementation      "androidx.room:room-runtime:$androidXRoom"
kapt "androidx.room:room-compiler:$androidXRoom"
implementation      "androidx.room:room-rxjava2:$androidXRoom"

ext.androidXRoom = "2.1.0-alpha02"

kotlin バージョン、ルーム バージョンを Android Arch Room に戻そうとしましたが、機能しません。また、プロジェクトのクリーンアップと Android Studio のキャッシュの無効化も試しました。しかし、機能しません。

編集: AppDatabase ソース

package com.example.persistence.db

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import com.example.persistence.post.PostDbDao
import com.example.persistence.post.PostDbEntity

@Database(entities = [PostDbEntity::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

    abstract fun favoritePostsDao(): PostDbDao

    companion object {

        var INSTANCE: AppDatabase? = null

        fun getDatabase(context: Context): AppDatabase? {
            if(INSTANCE == null) {
                synchronized(AppDatabase::class) {
                     INSTANCE = Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, "post_db").build()
                }
            }
            return INSTANCE
        }

        fun destroy() {
            INSTANCE = null
        }
    }

}

ベストアンサー1

問題は、依存関係の定義方法にある可能性が高く、RoomDatabaseはパブリック API の一部でありAppDatabase、それを拡張し、下流の依存関係でそのクラスを使用すると考えられます。ただし、 はRoomDatabase実装のみの依存関係として宣言されています。つまり、コンパイル中にクラスが下流の依存関係で通常使用できないことを意味します。

"androidx.room:room-runtime:$androidXRoom"パブリック API の一部となるように構成を変更してみてくださいapi。これにより、発生しているエラーが解決されるはずです。

おすすめ記事