【发布时间】:2021-08-18 00:53:06
【问题描述】:
我正在开发一个安卓应用程序。我很难编写将待办事项列表添加到日历的代码。让我先给你看代码。
private fun addTodoList(entity: MyTodo) {
val start = Calendar.getInstance()
val end = start.clone() as Calendar
end.time = SimpleDateFormat("MM dd, yyyy", Locale.getDefault()).parse(Date.END_OF_DAY)!!
CoroutineScope(Dispatchers.Default).launch {
val id = MyDatabase.getInstance(mContext).getTodoDao().insert(entity)
val dao = MyDatabase.getInstance(mContext).getCalendarDao()
do {
val date = ymd.format(start.timeInMillis)
val item = CalendarEntity(date, id.toInt())
dao.insert(item)
start.add(Calendar.DAY_OF_MONTH, 1)
} while (start.timeInMillis <= end.timeInMillis)
}
}
这是插入用户通过TodoDao创建的Todo的代码,并将值插入CalendarDao从今天到Date.END_OF_DAY(我随机指定这个值为“2025年12月31日”) .但是通过CalendarDao 的插入速度非常慢。在 UI 上没有什么不便,但是如果用户在插入过程中从任务中完全终止了应用程序,它将在没有插入数据的情况下终止,直到结束。据说使用RxJava可以解决这个问题,请问怎么解决呢?即使不是RxJava,如果有办法解决这个问题,请告诉我。
【问题讨论】:
-
你为什么要这样做?也许最好考虑仅使用开始日期和(可选)结束日期来保存项目 - 并调整查询以相应地返回数据。如果您每天都将相同的项目保存到数据库中,尤其是在移动设备上,您的用户将不会很高兴,因为他们的设备空间不足。如果他们决定更改标题会怎样?还是开始/结束日期?我认为即使对你自己和未来的维护者来说,你也让这件事变得非常复杂。
标签: android rx-java android-room kotlin-coroutines