Комната с кинжалом в Котлине: Дао имеет значение null, при введении в класс

Я просто знакомлюсь с новой библиотекой Room, и я столкнулся с раздражающей проблемой. У меня есть класс UserRepository , который загружает данные из сети и из локального хранилища в зависимости от нескольких факторов. Когда я хочу вставить объект Dao из базы данных, я получаю эту ошибку:

java.lang.IllegalArgumentException: параметр, заданный как ненулевой, равен null: метод 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() может быть нулевым? Нужно ли выполнять дополнительную инициализацию до того, как я запрошу ее из базы данных? Я не могу найти информацию об этом в любом месте

Я использую этот код:

 @Database(entities = arrayOf(User::class), version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userModel(): UserDao companion object { private const val DB_NAME = "users.db" fun createPersistentDatabase(context: Context): AppDatabase = Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, DB_NAME).build() } } 

И я ввожу его, используя:

  @Singleton @Provides fun provideApp(context: Context) = AppDatabase.createPersistentDatabase(context) 
Intereting Posts
Как не передавать данные Flowable для модульных тестов? Возврат из функции в Kotlin как однострочный, когда объект равен нулю Объекты компаньона Котлина и отражение Загружать ресурс из локального каталога без класса В чем разница между CoroutineContext и Job в kotlinx.coroutines? SetChecked () не работает Как преобразовать / преобразовать коллекцию в другую коллекцию по свойству элемента? Можно получить локальные имена переменных программно в Java или Kotlin? Kotlin – цепочка оператора безопасного вызова. ненужные вызовы оператора Как сохранить имя пользователя и пароль из моего приложения в мою базу данных и как подключить мое приложение к моей базе данных? Как функции хранения в статической коллекции будут влиять на систему? Android Studio (Kotlin) GsonBuilder.registerTypeAdapter () дает 2 ошибки Функция возврата объекта внутреннего класса Проблема с kotlin для Android Котлин: ошибка в картах