如何在首次运行时填充 Android Room 数据库表?

2024-04-18

In SQLiteOpenHelper有一个onCreate(SQLiteDatabase ...)我用来用一些初始数据填充数据库表的方法。

有没有办法首先将一些数据插入 Room 数据库表 应用程序运行?


Updated

您可以通过 3 种方式执行此操作:重要的是检查此迁移详细信息 https://developer.android.com/training/data-storage/room/prepopulate

1-从导出的资产模式填充数据库

Room.databaseBuilder(appContext, AppDatabase.class, "Sample.db")
    .createFromAsset("database/myapp.db")
    .build();

2-从文件填充数据库

Room.databaseBuilder(appContext, AppDatabase.class, "Sample.db")
    .createFromFile(new File("mypath"))
    .build();

3-您可以在创建数据库后运行脚本,或者在每次打开数据库时运行脚本RoomDatabase.Callback,此类在最新版本的 Room 库中可用。

你需要实施onCreate and onOpen的方法RoomDatabase.Callback并将其添加到RoomDatabase.Builder如下所示。

yourDatabase = Room.databaseBuilder(context, YourDatabase.class, "your db")
    .addCallback(rdc)
    .build();

RoomDatabase.Callback rdc = new RoomDatabase.Callback() {
    public void onCreate (SupportSQLiteDatabase db) {
        // do something after database has been created
        
    }
    public void onOpen (SupportSQLiteDatabase db) {
        // do something every time database is open
     
    }
};

参考 https://medium.com/@srinuraop/database-create-and-open-callbacks-in-room-7ca98c3286ab

您可以在 RoomDatabase.Callback 方法中使用 Room DAO 本身来填充数据库。完整示例请参见分页和房间示例 http://www.zoftino.com/pagination-in-android-using-paging-library

   RoomDatabase.Callback dbCallback = new RoomDatabase.Callback() {
        public void onCreate(SupportSQLiteDatabase db) {
            Executors.newSingleThreadScheduledExecutor().execute(new Runnable() {
                @Override
                public void run() {
                   getYourDB(ctx).yourDAO().insertData(yourDataList);
                }
            });
        }
    };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在首次运行时填充 Android Room 数据库表? 的相关文章

  • 滚动时重用视图时保存 RecyclerView 中所选项目的状态

    我为 recyclerView 创建了一个 Adapter 和 ViewHolder 我将 itemView 的 imageButton 绑定到 Viewholder 内 并在 onBindViewHolder 中设置了一个 onClick
  • 如何更新 Android 上的 Google Analytics 清单?

    我正在尝试禁用 Google Firebase Analytics 的自动屏 幕报告 在里面Firebase 博客文章 https firebase googleblog com 2020 08 google analytics manua
  • Android IAB:设备上无法使用计费服务

    我正在尝试在我的应用程序中实现 IAB 每次应用程序启动时 启动都会失败并显示 Problem setting up In app Billing IabResult Billing service unavailable on devic
  • Android 中的 Ping 应用程序

    我正在制作一个应用程序 它将实现 ping 命令的一些功能 问题是 我不知道在 ANDROID 中使用哪个 哪些库 有人对此有什么想法吗 我访问过这些 stackoverflow 链接 但它们并不是很有帮助 有没有办法让 Android 设
  • 适用于 Android 的 Google Analytics API v4 不发送屏幕视图

    我已经为 google Analytics api v4 设置了所有内容 如下所示 https developers google com analytics devguides collection android v4 https de
  • Android SQLite 通配符

    我正在尝试使用通配符元素进行查询 以在 SQLite 表中搜索特定变量中任意位置具有元素的条目 public String getCheckoutEntry String title String ISBN Wild card Syntax
  • Android XML 有没有办法将工具命名空间与自定义属性一起使用?

    我创建了一个带有属性的自定义视图 有没有办法在 Android studio 中通过 android 工具使用这些属性 例如
  • 如何从屏幕上的任意位置拖动底页?

    我正在尝试实现类似 YouTube 的体验 并允许用户从屏幕中的任何位置拖动底部工作表 我尝试了很多解决方案没有任何帮助 我终于从这个解决方案中找到了解决方案在外部区域达到阈值后允许 BottomSheet 向上滑动 https stack
  • Flaky Android Espresso 测试 - Snackbar

    1 所有正在测试的设备 模拟器都禁用了动画 2 我有一个 BeforeClass 来构建我的 Credentials 对象 3 我有一个IntenServiceIdlingResource和一个EventBusIdlingResource
  • 使用 HttpsURLConnection 时如何覆盖 Android 发送到服务器的密码列表?

    在 TLS 协商期间 客户端将受支持的密码列表发送到服务器 服务器选择一个 然后开始加密 当我使用时 我想更改 Android 发送到服务器的密码列表HttpsURLConnection用于沟通 我知道我可以使用setSSLSocketFa
  • ConstraintLayout 内的 ImageView 不起作用

    我在正确显示 ImageView 时遇到问题 我想在 ConstraintLayout 中显示 ImageView 在预览中 它看起来完全符合我的需要 但是当我在设备上启动它时 它看起来完全不同 此布局位于回收视图内 这段代码有什么问题
  • 限制特定设备销售应用程序?

    是否可以通过特定设备或设备的功能 屏幕分辨率 处理器 磁盘空间等 来限制 Android Market 上应用程序的销售 我知道我会受到人们的轰炸 他们说如果你的应用程序设计得好 它应该能够在任何尺寸的设备上运行 这一切都很好 但出于某些原
  • Firebase 依赖项:“警告:API 'variant.getMergeResources()' 已过时并已被替换”[重复]

    这个问题在这里已经有答案了 我最近开始使用 firebase 并按照官方指南添加了一些依赖项到我的项目中以便能够使用它 以下是我添加到新创建的项目中的依赖项 apply plugin com google gms google servic
  • 模拟三星 Galaxy Tab

    我想使用新的 Samsung Galaxy Tab 平板电脑测试我的应用程序 我应该在模拟器中设置什么参数来模拟该设备 我应该设置什么分辨率和密度 如何表明这是一个大屏幕设备 这款平板电脑支持哪些硬件 最大堆大小是多少 哪个安卓版本 UPD
  • TextWatcher.onTextChanged 被多次调用

    我已经阅读了有关此问题的一些主题 但找不到完整的答案 我有一个包含 3 行的 ListView 每行包含一个 TextView 和一个 EditText 以及一个扩展 BaseAdapter 的自定义适配器 这是适配器的 getView 函
  • 在广播接收器响应 Intent.ACTION_BATTERY_CHANGED 之前获取电池电量

    我的程序中有一个广播接收器 可以对电池电量做出反应 如下所示 private BroadcastReceiver mBatInfoReceiver new BroadcastReceiver Override public void onR
  • 使用 Android 手机在空中绘画

    我正在开发一个用 Android 手机在空中画画的应用程序 当我的手机移动时 借助加速度计 我检索了每个轴 ax ay az 上的加速度 我感兴趣的是 x y z 根据我在论坛和一些教程中读到的内容 两次积分加速会产生巨大的错误 那么 对于
  • 打算在 Android 上打开 Instagram 用户个人资料

    我正在开发一款社交网络应用程序 我们的用户可以将他们的 Instagram 帐户连接到我们的服务 我想直接在他们的官方 Android 应用程序 如果已安装 中打开 Instagram 个人资料 但我找不到任何方法来做到这一点 然而 有一个
  • Google 地图视图无法在模拟器上显示

    您好 我正在尝试在 Android 模拟器中显示地图 但它无法在地图视图中显示谷歌地图 并且也不从 Android 模拟器上的浏览器连接 www google com 那么是否有关于在模拟器上运行互联网的任何设置 谁能帮我解决这个问题 尝试
  • Android:创建自定义形状进度条的最佳方法

    我想创建一个自定义形状的进度条 它会根据其进度改变颜色 但这几乎是一个不同的问题 那么 创建如下图所示的自定义形状进度条的最佳方法是什么 抱歉 MS Paint 绘图技巧不佳 为了拥有所有可能性 您应该创建一个从进度条派生的自定义类并完全重

随机推荐