首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Android Room的@Insert上返回Single<Long>不起作用

是因为Room的@Insert注解默认情况下返回的是一个long类型的值,表示插入操作影响的行数。如果想要返回插入的行的主键值,可以使用@Insert注解的onConflict参数来指定冲突策略,并使用@Insert注解的返回类型为long[]或List<Long>。

具体来说,可以按照以下步骤进行操作:

  1. 在定义Dao接口的地方,将@Insert注解的返回类型改为long[]或List<Long>,如下所示:
代码语言:txt
复制
@Insert(onConflict = OnConflictStrategy.REPLACE)
List<Long> insertData(Data... data);
  1. 在调用插入操作的地方,使用Single.fromCallable()方法将插入操作包装成一个Single对象,并在call()方法中返回插入的行的主键值,如下所示:
代码语言:txt
复制
Single<List<Long>> insertSingle = Single.fromCallable(() -> {
    // 执行插入操作
    return dao.insertData(data);
});
  1. 在订阅Single对象的地方,使用subscribeOn()方法指定在后台线程执行插入操作,并使用observeOn()方法指定在主线程接收结果,如下所示:
代码语言:txt
复制
insertSingle
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new SingleObserver<List<Long>>() {
        @Override
        public void onSubscribe(Disposable d) {
            // 订阅成功
        }

        @Override
        public void onSuccess(List<Long> ids) {
            // 插入成功,ids为插入的行的主键值
        }

        @Override
        public void onError(Throwable e) {
            // 插入失败
        }
    });

这样,就可以通过返回Single<List<Long>>来获取插入的行的主键值了。

关于Android Room的更多信息和使用方法,可以参考腾讯云的文档:Android Room

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 架构组件最新进展 (下篇)

根据我们曾经做调查,开发者们希望 Android 官方可以维护一些实用组件库和架构实践,以降低中大型应用开发门槛,这样开发团队就可以集中更多精力实际业务优化和改进。...是一个 SQLite 提供抽象层持久存储库,您可以回顾我们之前介绍文章了解更多 Room 详细信息。...Rx 支持 Room 2.1 中,您使用 insert, update, delete 方法能返回 Completable, Maybe 和 Single。...而且 Query 注解方法里可以使用 Rx 作为返回类型,并处理 update, insert 或者 delete 这样写入操作: @Insert fun addSong(song: Song...复制代码 Google Play services 集成 此功能即将到来,而且提升了 Marshmallow 之前版本设备运行性能。而且这个集成是可选,开发者可以根据需要自行选择是否集成。

83320

Android架构组件Room指南

一、简介 Room是Google推出Android架构组件库中数据持久化组件库, 也可以说是SQLite实现一套ORM解决方案。...Tips: @Insert方法也可以定义返回值, 当传入参数仅有一个时返回long, 传入多个时返回long[]或List<Long , Room实现insert方法实现时会在一个事务进行所有参数插入...<T : Room 支持返回RxJava2 Flowablbe, Maybe和Single对象,对于使用RxJava项目可以很好衔接, 但需要在gradle添加该依赖:android.arch.persistence.room...类, 一堆代码类似的数据库访问类(DAO),访问数据库时需要做Cursor遍历,构建并返回对应POJO类…相比之下,Room作为SQLite之上封装ORM库确实有诸多优势,比较直观体验是: 比...总结 以上所述是小编给大家介绍Android架构组件Room指南,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

1.4K10
  • room使用-以demo为例

    " //数据库迁移时候使用 compile "android.arch.persistence.room:testing:1.0.0-alpha5" 项目的build.gradle...) void insertAll(List students); //如果@Insert方法只接收一个参数,它可以返回一个long,代表新插入元素rowId...@Insert long insert(Student student); //可以返回一个int类型值,表示从数据库中被删除行数,虽然通常并没有这个必要 @Delete...查询结果如果是long类型,可以直接返回Date。 数据库迁移 随着app功能添加和修改,你需要修改entity类来反应这些变化。...这样就可以直观看到数据库有没有更改成功~ 从原生sqlite到room迁移 和room不同版本迁移没什么区别,毕竟本质都是对sqlite操作,但是同样要注意版本号问题。

    2.2K30

    MVVM数据持久化(一)——ROOM集成

    简介地址 https://developer.android.google.cn/training/data-storage/room/ RoomSQLite提供了一个抽象层,以便在发挥SQLite...用@Database注解类应满足以下条件: 是一个继承RoomDatabase抽象类。 注释中包含与数据库相关联实体列表。 包含一个具有0个参数抽象方法,并返回用@Dao注释类。...三者关系图 加入依赖 以上简单介绍了一下Room 下面我们着重介绍如何在我们框架当中使用 首先加入依赖 implementation 'android.arch.persistence.room...要为一个entity添加索引,@Entity注解中添加indices属性,列出你想放在索引或者组合索引中字段。 有时候,某个字段或者几个字段必须是唯一。...package yang.cehome.com.mvvmdemo.model.local.dao import android.arch.persistence.room.Dao import android.arch.persistence.room.Insert

    1.5K20

    Android Room 持久化库

    public void insertUsersAndFriends(User user, List friends); } 如果 @Insert 只接受到一个参数,他会返回一个新插入行 long...如果参数是 一个数组和集合就会返回一个long类型数组或集合。...关于 @Insert 详细介绍查看文档 https://developer.android.com/reference/android/arch/persistence/room/Insert.html...测试数据库有两种方法 Android 设备 开发主机上(不推荐) 关于测试指定数据库升级信息 上面已经说过了。 注意:测试时,Room允许创建Dao模拟实例。...这样的话,如果不是测试数据库本身就不需要创建完整数据库,这个功能是很好,Dao不会泄露数据库任何信息 设备测试 测试数据库实现推荐方法是编写在Android设备运行JUnit测试,由于这些测试不需要创建活动

    4K70

    Androidroom数据库使用小结(kotlin)

    首先准备,引入依赖,app文件夹下build.gradle中增加: //ROOM数据库 implementation "android.arch.persistence.room:runtime..."android.arch.persistence.room:compiler:1.1.1"写法需换成kapt "android.arch.persistence.room:compiler:1.1.1..." 还需引入一个插件:apply plugin: 'kotlin-kapt' 代码结构目录是不是很清晰,room下dao单独建dao包,操作接口在这里实现,所有的表定义单独entity包中。...= null } 第二步,dao包里写对应dao,对应操作, 注意这些操作接口最好都带个返回值,比如insert返回long,delete返回Int。因为最终使用总要对操作结果来个判断吧。...@Insert fun insert(user: User?):Long @Delete fun delete(vararg users: User?)

    3.2K50

    【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

    使用 @Database 注解修饰该类 , 其中定义 获取 Dao 数据库访问对象抽象方法 , 以及 将该抽象类设置成 单例类 , 单例对象初始化时创建数据库 ; Room 框架中 Dao...将 Room 封装起来 , 由 ViewModel 与 Repository 进行交互 ; ViewModel 与 Room 结合使用 , 实际与 Repository 进行交互 ; ViewModel...框架主动查询数据库数据需保留除 LiveData 返回值外正常查询方法 Room 框架 与 LiveData 结合使用之后 , Room 框架中 Dao 数据库访问接口中 定义了 LiveData...Room 框架中 Dao 数据库访问对象接口 定义方式需要作出改变 , 涉及到数据库查询 接口方法时 , 其返回值需要 返回 LiveData 类型 , 泛型设置为 List 类型...原则不允许主线程操作数据库 // 如果要在主线程操作数据库需要调用该函数

    87220

    上手使用 Room Kotlin API

    developer.android.google.cn/codelabs/android-room-with-a-view-kotlin#0 定义数据库表 我们数据库中仅有一个表,就是保存词汇表。...@Insert suspend fun insert(word: Word) 底层 Room 生成了 Dao 抽象函数实现代码。...我们希望当数据库中数据发生改变时候,能够得到相应通知,所以我们返回一个 Flow>。由于返回类型是 Flow,Room 会在后台线程中执行数据请求。...instance } } } 测试 Dao 为了测试 Dao,我们需要实现 AndroidJUnit 测试来让 Room 设备创建 SQLite 数据库。...当实现 Dao 测试时候,每个测试运行之前,我们创建数据库。当每个测试运行后,我们关闭数据库。由于我们并不需要在设备存储数据,当创建数据库时候,我们可以使用内存数据库。

    1.6K10

    Android Jetpack - Room

    Room 简介 Room 持久化库提供了一个基于 SQLite 抽象层,以便在利用 SQLite 全部功能同时实现更强大数据库访问 Room 库帮你 App 设备创建一个缓存,并作为此 App...然后,设备重新联机后,任何用户启动内容更改都会同步到服务器 Room 三个主要部分包括 Database 包含数据库持有者,并作为应用程序持久关系数据基础连接主要访问点。...使用@Database注释类应满足以下条件: 继承了 RoomDatabase 抽象类 注解中包含与数据库相关联实体类列表 包含一个无参抽象方法,并返回使用 @Dao 注释类。...Entity Room 中,每个被 @Entity 标注 data class 都被视为 Database 中一张表 @Entity(tableName = "word_table") data...insert ,可以使用 suspend 关键字修饰,然后利用协程非 UI 线程执行此方法 @Dao interface WordDao { @Insert suspend fun

    1.9K70

    JetPack--Room数据库

    JetPack提供了Room数据库,和GreenDAO等开源库一样,SQLite做了封装 Room主要使用三个注解: 1.Entity:实体类,对应一张表 2.Dao:包含操作表一些列方法 3.Database...需要满足:定义类是一个继承RoomDatabase抽象类,注解中定义包含实体类列表,包含一个没有参数抽象方法并返回Dao对象 一、Room上手 首先添加依赖: implementation...' 定义一个实体类,class使用 @Entity注解 ,还需要一个构造方法,Room会根据这个构造将表里数据转化为实体类,对于其他我们代码里使用构造方法,可以使用@Ignore注解表示Room...、数据库版本、是否输出日志 使用单例模式时,构造方法不能私有化,因为Room内部会调用构造方法 定义获取Dao对象抽象函数 package com.aruba.room; import android.content.Context...二、ViewModel+LiveData+Room Room支持返回LiveData类型,结合ViewModel、DataBinding,就可以改造成一个非常棒MVVM架构 package com.aruba.room

    1.5K20

    Google 推荐 MVVM 架构中使用 Kotlin Flow

    Fragment 1.2.0 重要更新:通过 Fragment 构造函数传递参数,以及 FragmentFactory 和 FragmentContainerView 使用 我近期也开发另外一个...,实际项目中常用可能只有几个例如 Observable 、 Flowable 、 Single 等等,如果我们不去了解背后原理,造成内存泄露是很正常事,大家可以从 StackOverflow...Flow 是协程扩展,如果要在 Room 和 Retrofit 中使用,Room 和 Retrofit 需要支持协程才可以, Retrofit >= 2.6.0 和 Room >= 2.1 版本都支持协程...按照如上配置,在数据源工作就完成了,相比于 RxJava Observable 、 Flowable 、 Single 、 Completable 、 Maybe 使用场景要简单太多了,我们来看一下...).observe(this, Observer { // 将数据显示页面上 }) 方式三: 调用 Flow 扩展方法 asLiveData() 返回一个不可变 LiveData, Activity

    4.1K20

    Jetpack---Paging你知道怎样拉加载吗?

    背景 Jetpack_Note系列中,对每一篇分析都有相对应代码片段及使用,我把它做成了一个APP,目前功能还不完善,代码我也上传到了GitHub,参考了官方Demo以及目前网上一些文章...Paging库中提供了三个子类来让我们不同场景情况下使用: PageKeyedDataSource:如果后端API返回数据是分页之后,可以使用它;例如:官方Demo中GitHub API中SearchRespositories...就可以返回分页数据,我们GitHub API请求中制定查询关键字和想要哪一页,同时也可以指明每个页面的项数。...loadAfter同理,只不过我们加载数据后对key也就是我们page进行了+1操作。...到这里整个流程就已经结束了,想看源码可以到Github。 4.

    1.8K40

    Android 架构组件 - 让天下没有难做 App

    其中 Architecture 部分组件(Android Architecture Components,以下简称 AAC)组合起来形成了一套完整架构解决方案,没有更好方案被发明出来之前,我们姑且把...Github 出现了不少 ORM 框架,但是它们易用性也不敢让人恭维,直到 Room 出来之后,Android 程序员终于可以像 mybatis 那样轻松地操纵数据库了。...Room 是 SQLite 之上应用抽象层,而 SQLite 是一个位于 Android Framework 层内存型数据库。...fun timestampToDate(value: Long?)...,而且它返回值可以是 LiveData 类型,也支持 Flowable 类型,也就是说,Room 原生支持响应式,这是对数据驱动最有利支持,也是 Room 区别于其他 ORM 框架显著特征。

    1.2K20

    livedatabus详解,阿里是如何用他来做淘宝架构

    其中 Architecture 部分组件(Android Architecture Components,以下简称 AAC)组合起来形成了一套完整架构解决方案,没有更好方案被发明出来之前,我们姑且把...Github 出现了不少 ORM 框架,但是它们易用性也不敢让人恭维,直到 Room 出来之后,Android 程序员终于可以像 mybatis 那样轻松地操纵数据库了。...Room 是 SQLite 之上应用抽象层,而 SQLite 是一个位于 Android Framework 层内存型数据库。...fun timestampToDate(value: Long?)...,而且它返回值可以是LiveData类型,也支持Flowable类型,也就是说,Room 原生支持响应式,这是对数据驱动最有利支持,也是 Room 区别于其他 ORM 框架显著特征。

    1.2K30
    领券