当前位置: 首页 > 知识库问答 >
问题:

kotlin不确定如何处理insert方法的返回类型

丘向荣
2023-03-14

我正在使用kotlin和room库开发一个android应用程序。当我试图获取插入项的id时,我得到了以下错误

不确定如何处理insert方法的返回类型。公共抽象java。lang.Object InsertReceive(@org.jetbrains.annotations.NotNull()

我尝试过其他类似的解决方案,但它不起作用

这是我的密码

收据kt

@Entity
data class Receipt(
    @ColumnInfo() val receipt_timestamp: Timestamp,
    @ColumnInfo() val receipt_items: Int,
    @ColumnInfo() val receipt_total_price: BigDecimal
){
    @PrimaryKey(autoGenerate = true)
    var receiptNo: Int = 0
}

接收道。kt

@Insert()
    suspend fun insertReceipt(receipt: Receipt): Int

ReceiptRepository.kt

suspend fun insertReceipt(receipt: Receipt): Int{
        return receiptDAO.insertReceipt(receipt)
    }

共有2个答案

乐正浩博
2023-03-14

使用@Insert注释进行注释的方法可以返回:

    long for single insert operation
    long[] or Long[] or List for multiple insert operations
    void if you don't care about the inserted id(s)

因此,您必须将返回类型从Int更改为Long:

return receiptDAO.insertReceipt(receipt).toLong()
慕震博
2023-03-14

那是因为你不能像这样获得id。您可以使用此函数获取id,但它不是您想要的id。

https://developer.android.com/training/data-storage/room/accessing-data#convenience-insert返回的id是sqlite使用的内部id。

为了实现你想要的,你需要这样的东西:

@Query("SELECT receiptNo FROM receipt WHERE receipt_timestamp = :receipt_timestamp AND receipt_items = : receipt_items AND receipt_total_price = :receipt_total_price LIMIT 1")
fun getId(receipt_timestamp: Timestamp, receipt_items: Int, receipt_total_price: BigDecimal): Int
 类似资料:
  • 我不明白,我以为这是获取新插入行的id的方法。 刀 实体 但是构建失败,我得到的错误是指向我的类,错误是: 错误:不确定如何处理插入方法的返回类型。 我错过了什么?

  • 我正在使用JBoss6.1、Spring3.2、hibernate验证以及最近启用的CORS支持。请求与GET方法配合良好。如果使用请求方法POST,我希望控制器返回405。但我得到的是http状态码400。我在jboss日志中启用了跟踪,发现spring返回了错误的处理程序。应用程序只有一个控制器接受POST请求方法,其余控制器定义为只接受GET方法。每当使用POST请求方法对这些控制器(用GE

  • 如何使用Kotlin、Coroutines、ViewModel和LiveData处理查询方法的返回类型room 建筑失败了,我得到了很多错误,这些错误指向我的道类,错误是 错误1: 不确定如何处理查询方法的返回类型(java.lang.Object)。DELETE查询方法必须返回void或int(已删除的行数)。 错误2: 错误:查询方法参数应该是可以转换为数据库列的类型,或者是包含此类类型的列表

  • 使用我得到了这个错误,我想找出是哪种方法导致的。 我有多个s,总共大约有60个方法,这个错误只是在添加一个方法(复制 我可以发布整个类的s,但是我需要一种方法来知道哪个方法失败了。我尝试了,和,但是这些都没有显示任何有价值的信息。 我添加的方法是一个,带有返回类型,如在留档中建议的那样 UPDATE或DELETE查询可以返回空或int。如果是int,则该值是受此查询影响的行数。 编辑:我想补充一点

  • 本文向大家介绍ThinkPHP处理Ajax返回的方法,包括了ThinkPHP处理Ajax返回的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ThinkPHP处理Ajax返回的方法,分享给大家供大家参考。具体实现方法如下: 在ThinkPHP中可以直接使用ajax返回: 而在处理过程中可以使用这个函数处理: 希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

  • 我在这里看到了很多问题,但这些答案都没有解决我的问题。这是我的DAO: 我正试图得到一个包含在该类别中的食谱列表。我得到一个编译时错误,它说: C: 。。。\app\build\tmp\kapt3\stubs\debug\com\mitch\rcp\RecipeDAO。java:18:错误:不确定如何将游标转换为此方法的返回类型(void)。 但我的返回类型不是void?我不明白。