![](/img/trans.png)
[英]Unable to store nested json in Android Room Database Kotlin
[英]Unable to Insert values in Room Database in Android [Kotlin]
我试图在我的房间数据库中插入值,但应用程序检查没有显示任何内容。 我有一个复杂的应用程序结构,有很多表和一个数据库。 我能够对除一个表之外的所有表执行 CRUD 操作。 我无法确定我做错了什么。
代码 -->
实体
@Entity(tableName = "add_time")
data class TimeEntity(
@PrimaryKey(autoGenerate = true)
var id: Int? = null,
@ColumnInfo(name = "start_time")
var startTime: String? = "",
@ColumnInfo(name = "end_time")
var endTime: String? = "",
@ColumnInfo(name = "running_time")
var runningTime: String? = "",
)
道
@Dao
interface FloorTimeDao {
//Insert time
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertTimeForScheduling(timeEntity: TimeEntity) {
}
}
存储库
class AddTimeRepository(private val timeDao: FloorTimeDao) {
//insert
@WorkerThread
suspend fun insertTime(time: TimeEntity) = timeDao.insertTimeForScheduling(time)
}
视图模型
class AddTimeViewModel(private val repository: AddTimeRepository) : ViewModel() {
//insert
fun insertTime(timeEntity: TimeEntity) = viewModelScope.launch {
repository.insertTime(timeEntity)
}
}
视图模型工厂
@Suppress("UNCHECKED_CAST")
class AddTimeViewModelFactory(private val repository: AddTimeRepository) :
ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
if (modelClass.isAssignableFrom(AddTimeViewModel::class.java)) {
return AddTimeViewModel(repository) as T
}
throw IllegalArgumentException("Unknown ViewModel Class")
}
}
用于增加价值的代码内部代码
//Inserting new time in the table
binding.btnAddTime.setOnClickListener {
try {
timeRunning = timeEnd - timeStart
timeRunning = abs(timeRunning)
Timber.d("Final Time start : $timeStart")
Timber.d("Final Time end : $timeEnd")
Timber.d("Final Time running : $timeRunning")
val timeEntity = TimeEntity(
startTime = timeStart.toString(),
endTime = timeEnd.toString(),
runningTime = timeRunning.toString()
)
Timber.d("Time Entity: $timeEntity")
addTimeViewModel.insertTime(timeEntity)
} catch (e: Exception) {
Timber.d("Exception : $e")
}
}
一切似乎都被正确添加了,我似乎仍然无法找出我在这里做错了什么。 任何帮助,将不胜感激。 如果您需要更多代码,我可以提供,请告诉我。
注意:使用此代码基本上我试图将时间存储在房间数据库中,该时间是使用时间选择器对话框从用户那里获取的。
编辑1:发现了一些我不知道它是否与问题或任何东西有关的东西。 但是对于我能够插入和读取数据的表,function 会这样说:
不同之处在于(对于它正在工作的那个)功能说Choose Implementation
并在左侧有一个绿色符号。 但是对于它不起作用的表,function 说Choose overridden
的方法。
更新:我能够通过为表创建一个新的 Dao 接口来解决这个问题。 我仍然不太确定可能是什么问题,因为两个 DAO 文件看起来都一样。 但我有些怀疑,这可能是由于我们创建新的 DAO 或表时房间自动实现所致。
@PrimaryKey(autoGenerate = true)
var id: Int? = null,
尝试更改 id Int? - 到不可为空的类型 Int 或 Long。 为什么您需要在实体构造函数中具有预定义(初始化)值?
我能够通过创建一个具有相同功能的新 Dao 文件来解决这个问题。 该问题可能是由于 Room Library 提供的 DAO 的自动实现所致。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.