android - 使用匕首 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
解决方案
推荐阅读
- colors - iText7 - 将 pdflayer 颜色设置为黑色
- r - 使用 if 条件删除特定的列/行值
- spring - 基于属性(来自配置服务器)是否覆盖/替换了基于 java 的路由配置?
- excel - Excel 时间线 - 想要从 Excel 时间线中的“时间级别”过滤器中删除“日”
- c# - 将嵌套集合绑定到列表视图列
- typescript - TypeScript - 有没有办法将存储在对象中的方法包含到类中?
- java - 如何使用模块化 Java 在 Gradle 6.6 中设置 mainClassName
- c# - Openxml 在书签处插入斜体。(字符串中的几个字符是斜体)
- weblogic - Oracle Weblogic 教程
- javascript - 添加自定义 Bokeh JS