1
我刚刚熟悉新房间库,并且我遇到了一个烦人的问题。我有一个UserRepository
类,它根据多个因素从网络和本地存储装载数据。当我想从数据库中注入DAO对象,我得到这个错误:Kotlin中的匕首房间:当注入类时Dao为空
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull
这里是代码的部分,什么可能导致此错误
ApplicationModule
@Module
class ApplicationModule(val application: CustomApplication) {
private val BASE_URL = "https://api.stackexchange.com/2.2/"
@Provides
@Singleton
fun provideAppContext() : Context = application
@Provides
@Singleton
fun provideRetrofit(): Retrofit = Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(Gson()))
.baseUrl(BASE_URL)
.build()
@Provides
@Singleton
fun provideUserRepository(retrofit: Retrofit, database: AppDatabase) =
UserRepository(
retrofit.create(UserService::class.java),
retrofit.create(QuestionService::class.java),
database.userDao())
@Provides
@Singleton
fun provideDatabase(context: Context)
= Room.databaseBuilder(context, AppDatabase::class.java, "db-name").build()
}
userDAO的
@Dao
interface UserDao {
@Query("SELECT * FROM user")
fun getAllUsers() : Flowable<List<User>>
@Insert
fun insertAll(users: List<User>)
}
AppDatabase
@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao() : UserDao
}
有谁知道为什么database.userDao()
可能为空?在我从数据库请求它之前,是否需要执行额外的初始化?我无法找到信息关于这个随时随地
这基本上是相同的代码,只需创建代码被移动到AppDatabase类 –