【发布时间】:2021-06-18 05:52:25
【问题描述】:
我是 kotlin 的新手。我不知道如何解决这个错误。 我收到“无法创建抽象类的实例”编译错误,我在 MainActivity 中遇到以下行:
val newsRepository = NewsRepository(ArticleDatabase(this))
MainActivity.kt:
val newsRepository = NewsRepository(ArticleDatabase(this)) --->Compile error line
val viewModelProviderFactory = NewsViewModelProviderFactory(newsRepository)
viewModel = ViewModelProvider(this, viewModelProviderFactory).get(NewsViewModel::class.java)
bottomNavigationView.setupWithNavController(newsNavHostFragment.findNavController())
NewsRepository.kt:
class NewsRepository(val db: ArticleDatabase) {
suspend fun getBreakingNews(countryCode: String, pageNumber: Int) =
RetrofitInstance.api.getBreakingNews(countryCode, pageNumber)
}
ArticleDatabase.kt:
@Database(
entities = [Article::class],
version = 1
)
@TypeConverters(Converters::class)
abstract class ArticleDatabase() : RoomDatabase() {
abstract fun getArticleDao(): ArticleDao
companion object{
@Volatile
private var instance: ArticleDatabase? = null
}
private val LOCK = Any()
operator fun invoke(context: Context) = instance?: synchronized(LOCK){
instance ?: createDatabase(context).also{ instance = it }
}
private fun createDatabase(context: Context) =
Room.databaseBuilder(context.applicationContext,
ArticleDatabase::class.java,
"article_db.db").build()
override fun createOpenHelper(config: DatabaseConfiguration?): SupportSQLiteOpenHelper {
TODO("Not yet implemented")
}
override fun createInvalidationTracker(): InvalidationTracker {
TODO("Not yet implemented")
}
override fun clearAllTables() {
TODO("Not yet implemented")
}
}
编辑:添加了 ArticleDatabase 类的完整代码。
【问题讨论】:
标签: kotlin mvvm android-room android-jetpack