使用dagger2注入会议室数据库时,我的应用程序崩溃了。当我只注入上下文时,它工作正常。在此示例中,我注入了空间来添加位置,但是我面对的是NPE环境。
java.lang.RuntimeException:无法启动活动ComponentInfo {com..roomdb / com..roomdb.mvp.view.MainActivity}:java.lang.NullPointerException:尝试调用虚拟方法'java.lang.Object android .content.Context.getSystemService(java.lang.String)'在空对象引用上
AppModule
@模块 类AppModule(私有val应用程序:应用程序){
@Provides
@Singleton
fun provideContext(): Application = app
@Provides
@Singleton
fun providesAppDatabase(app: Application): AppDatabase =
Room.databaseBuilder(app , AppDatabase::class.java, "place-db")
.allowMainThreadQueries().build()
@Provides
fun providesPlaceDao(database: AppDatabase) = database.placeDao()
App已添加到清单 应用类:Application(){
var component: AppComponent = DaggerAppComponent.builder().appModule(AppModule(this)).build()
fun getAppComponent() = component
}
注入
MainActivityModel类:MainActivityContract.Model {
@Inject
lateinit var db: AppDatabase
init {
App().getAppComponent().inject(this)
}
override fun addPlace(place: Place) {
db.placeDao().inserPlace(place)
}
}
Logcat
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ java.lang.Object android.content.Context.getSystemService(java.lang.String)”