首页 > 解决方案 > 使用匕首 2 注入房间数据库

问题描述

我只用一张表创建了我的基本 Room 数据库结构,User我正在尝试通过实现 Dagger 2 来访问。当我尝试UserDao从演示者访问该类时,它为空。我在这里想念什么。

userDao 在我的演示者中为空

  @Inject
    UserDao userDao;

  private void testingRoomDatabase() {
        com.i6systems.in2plane.AppDatabase.User user = new com.i6systems.in2plane.AppDatabase.User(
                1, "test", "room");
        userDao.insertAll(user); // ****userDao*** is null
        List<com.i6systems.in2plane.AppDatabase.User> users = userDao.getAll();
    }

房间实施

用户

@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

应用数据库

@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun getUserDao(): UserDao
}

用户道

@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    fun loadAllByIds(userIds: IntArray): List<User>

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
            "last_name LIKE :last LIMIT 1")
    fun findByName(first: String, last: String): User

    @Insert
    fun insertAll(vararg users: User)

    @Delete
    fun delete(user: User)
}

匕首 2 实施

房间模块

@Module
class RoomModule {

   lateinit var appDatabase: AppDatabase

    fun RoomModule(app: App) {
        appDatabase = Room.databaseBuilder(app.applicationContext, AppDatabase::class.java, "demo-db").build()
    }

    @Provides
    @PerApp
    fun providesRoomDatabase() : AppDatabase {
        return appDatabase
    }

    @Provides
    @PerApp
    fun providesUserDao(appDatabase: AppDatabase): UserDao {
        return appDatabase.getUserDao()
    }
}

应用组件

@PerApp
@Component(modules = {
        AppModule.class,
        RoomModule.class
})

任何建议都非常有帮助

谢谢R

标签: androidkotlinandroid-roomdagger-2dagger

解决方案


推荐阅读