房间数据库:插入的ID始终为0

2024-06-28

我正在尝试创建列表项的房间数据库。我在这里遵循这个例子:https://medium.com/mindorks/room-kotlin-android-architecture-components-71cad5a1bb35 https://medium.com/mindorks/room-kotlin-android-architecture-components-71cad5a1bb35

这是我的数据类:

@Entity(tableName = "itemData")
data class ItemData(@PrimaryKey(autoGenerate = true) var id: Long? = null,
                    @ColumnInfo(name = "text") var text: String,
                    @ColumnInfo(name = "checked") var checked: Boolean

)

The DAO:

@Dao
interface ItemDataDAO {

    @Insert(onConflict = REPLACE)
    fun insert(itemData: ItemData) : Long
}

数据库:

@Database(entities = arrayOf(ItemData::class), version = 1)
abstract class ItemDatabase() : RoomDatabase() {


    abstract fun itemDataDao(): ItemDataDAO

    companion object {
        private var INSTANCE: ItemDatabase? = null

        fun getInstance(context: Context): ItemDatabase? {
            if (INSTANCE == null) {
                synchronized(ItemDatabase::class) {
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                            ItemDatabase::class.java, "items.db")
                            .build()
                }
            }
            return INSTANCE
        }

        fun destroyInstance() {
            INSTANCE = null
        }
    }
}

工作线程:

class DbWorkerThread(threadName: String) : HandlerThread(threadName) {

    private lateinit var mWorkerHandler: Handler

    override fun onLooperPrepared() {
        super.onLooperPrepared()
        mWorkerHandler = Handler(looper)
    }

    fun postTask(task: Runnable) {
        mWorkerHandler.post(task)
    }
}

这是调用插入函数的监听器:

editText.setOnEditorActionListener { v, actionId, event ->
    return@setOnEditorActionListener when (actionId) {
        EditorInfo.IME_ACTION_DONE -> {
            createItem(editText)
            true
        }
        else -> false
    }
}

这是被调用以插入项目的函数:

fun createItem(editText: EditText) {
    var text = editText.text.toString().trim()
    var itemData = ItemData(text = text, checked = false)
    var id : Long? = 0
    val task = Runnable {
        id = mDb?.itemDataDao()?.insert(itemData)
        println("inserted $id")
    }
    mDbWorkerThread.postTask(task)
}

但 ID 始终为 0,因此只会插入一项。任何人都可以看到问题吗?

我也尝试过删除默认的null的值id,但它给出了相同的结果。


以下更改解决了该问题。

而不是像这样调用构造函数

var itemData = ItemData(text = text, checked = false)

我调用了默认的构造函数,然后构造完成后设置参数。

var itemData = ItemData()
itemData.text = text
itemData.checked = false

这需要 ItemData 实体的以下构造函数:

constructor():this(null,"",false)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

房间数据库:插入的ID始终为0 的相关文章

随机推荐

  • 我可以添加编译时检查以确保这是合法的处理程序函数吗? (受限通用)

    查看评论 我希望第二个 MapPost 调用在编译时失败 我只是在尝试使用 asp net 最小管道 我认为这需要受限泛型 但我是 C 新手 所以认为有人可以快速回答这个问题 希望如此 var router new ExampleRoute
  • 我可以使用独立签名作为 Perl 6 中的签名吗?

    我正在尝试使用 Perl 6 实现一个命令行程序 该程序需要进行多次切换 签名至MAIN非常复杂而且有点混乱 我想知道是否有一种方法可以在其他地方定义签名并告诉子例程使用什么 possibly big and messy signature
  • AWS S3 保存和加载项目需要多长时间?

    S3 常见问题解答提到 所有区域中的 Amazon S3 存储桶为新对象的 PUTS 提供写后读一致性 并为覆盖 PUTS 和 DELETES 提供最终一致性 但是 我不知道需要多长时间才能获得最终一致性 我尝试搜索此内容 但在 S3 文档
  • Marshal.PtrToStructure() 和结构 DEVMODE 中的字符数组出现问题

    我在使用 Marshal PtrToStructure 从指向 DEVMODE 类型结构的指针中提取数据时遇到问题 Here http msdn microsoft com en us library dd183565 28v vs 85
  • 无法发布 API 项目的 Google Apps Marketplace 列表审核请求

    我的要求是启用OAuth 2 0对于现有的OAuth 1 0应用在Google Apps Marketplace 我在以下位置创建了新的 Google 项目console https cloud google com console 并为其
  • 如果 Count(*) 为零,则返回 NULL

    我有以下 mysql 查询 SELECT count student name AS total student school name FROM student LEFT JOIN school info ON school info s
  • Nginx 返回文件路径

    我希望 Nginx 返回路径 example com r 的 r json 文件 我尝试过的 location r alias home user media json r json 但这一切都不起作用 我收到了 500 条消息 home
  • GWT - Intellij IDEA 中 GWT 的优秀 GUI 编辑器是什么?

    IDEA 附带的工具只不过是一个 GWT 项目创建工具 有更好的插件吗 GWT 有独立的 GUI 编辑器吗 直接回答你的问题 目前还没有适用于 GWT 的 Intellij IDEA GUI WYSIWYG 编辑器 GWT 最受欢迎 功能完
  • Django:在视图中访问时,settings.py 中的重音字符被破坏

    我在 settings py 中有重音字符 我使用 getattr settings MY CONSTANT NAME 在视图中访问这些字符 但 getattr 调用返回损坏的字符 例如 变为 xc3 xb4 这是 view py 中的代码
  • 多步算法的设计模式

    我正在编写一个控制台应用程序 该应用程序执行包含 N 个步骤的算法 这一步很重要N在步骤之前正确完成N 1被执行 否则程序应该停止工作并显示错误消息 我可以用嵌套来做到这一点if当然和用途的陈述try catch finally 在fina
  • Jquery:将rel属性添加到某个类的所有
  • 标签内的标签
  • 我正在尝试添加一个rel lightframe 归因于我的所有 编辑 链接admin links node edit class li class admin links node edit a href link title Edit E
  • 刷新电量查询VBA

    因此 我使用下面的代码来刷新我的查询连接 但是 如果由于 wtv 原因刷新失败 如何显示消息 因为此 VBA 显示刷新已完成 即使我的查询存在多个错误 Worksheets Details Unprotect Dim Connection
  • 编译器优化 - 函数没有地址

    我没有使用太多指向成员函数的指针 但我认为在使用此类指针时发现了一些危险的情况 当编译器由于某些优化而决定不为函数分配地址时 就会出现问题 VS 2015 即使在调试 x86 中也会发生这种情况 禁用优化 Od 我正在重构一个旧系统 将一些
  • 如何在线性布局周围添加边框(底部除外)?

    如何在线性布局周围添加边框 底部除外 LinearLayout 需要在左侧 顶部和右侧有边框 但底部不需要 在drawable文件夹中创建一个名为border xml的XML文件 并将以下代码放入其中
  • 如何删除警告:link.res包含输出部分;你忘了-T吗?

    我正在使用 fpc 编译器 我想删除此警告 我已经阅读了 fpc 的选项 但我找不到如何做到这一点 这可能吗 当我运行命令时出现 fpc foo pas out 目标操作系统 Linux for i386 编译 foo pas 链接 p2
  • zurb 基金会是否可以拥有完整的行宽度

    我正在使用 Foundation 3 构建响应式网站 但我想让页脚和导航背景宽度占据整个宽度 我将我的行命名为 class row navigation class row footer 我尝试寻找如何解决这个问题 但我没有选择 我假设这是
  • 如何使用 pip 安装 Openpyxl

    我有 Windows 10 64 位 我想利用Openpyxl包开始学习如何与 Excel 和其他电子表格交互 我安装了Python windowsx86 64web basedinstaller 我有 64 位操作系统 尝试安装此版本时我
  • Helm 安装未知标志 --name

    当我尝试使用 helm 安装图表时 helm install stable nginx ingress name my nginx 我收到错误 错误 未知标志 name 但我在很多文档中都看到了上面的命令格式 版本 version Buil
  • IntelliJ 的 javafx 集成场景生成器在 Oracle JDK 12 中无法工作

    我正在运行 Arch Linux 安装了最新的 IntelliJ 包以及 Oracle 的 JDK12 项目使用的 和 Gluon 的场景生成器 场景生成器的路径已正确设置 场景生成器独立工作 也是从 IntelliJ 启动时 我右键单击我
  • 房间数据库:插入的ID始终为0

    我正在尝试创建列表项的房间数据库 我在这里遵循这个例子 https medium com mindorks room kotlin android architecture components 71cad5a1bb35 https med