【发布时间】:2019-02-21 19:46:02
【问题描述】:
我在使用Dagger2 注入类时遇到问题。我正在使用RoomDatabase 进行数据库访问。
我的房间设置:
道氏
interface noteDao()
interface noteTypeDao()
interface userDao()
NoteRepository
@Singleton
class NoteRepository @Inject constructor(
private val noteDao: NoteDao,
private val noteTypeDao: NoteTypeDao,
private val userDao: UserDao
) {
}
应用数据库
@Database(entities = [Note::class, User::class, NoteType::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun noteDao(): NoteDao
abstract fun userDao(): UserDao
abstract fun noteTypeDao(): NoteTypeDao
companion object {
@Volatile
private var INSTANCE: AppDatabase? = null
fun getDatabase(context: Context): AppDatabase {
val tempInstance = INSTANCE
if (tempInstance != null) {
return tempInstance
}
synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"NoteDatabase"
).build()
INSTANCE = instance
return instance
}
}
}
}
Dagger 2 设置:
AppModule
@Module
class AppModule {
@Provides
fun provideNoteRepository(app: Application): NoteRepository {
return NoteRepository(
AppDatabase.getDatabase(app).noteDao(),
AppDatabase.getDatabase(app).noteTypeDao(),
AppDatabase.getDatabase(app).userDao()
)
}
@Provides
fun provideApplication(): Application {
return Application()
}
}
应用组件
@Component(modules = [AppModule::class])
interface AppComponent {
fun inject(app: MainActivity)
}
我在context.applicationContext 行中得到一个 NullPointerExeption int AppDatabase。任何建议如何解决这个问题?
AppDatabase 似乎没有从Dagger2 获取应用程序实例。
【问题讨论】:
-
return Application()是关于创建实际的 android 应用程序实例的吗?我认为这是你的空指针的错误和根本原因。
标签: android kotlin dagger-2 android-room