RxJava2 + Room:clearAllTables() 调用后数据未插入数据库

2024-01-08

成功后在我的Android应用程序中login我将会话信息保存在 Room 中,然后从 BE 检索用户信息并保存它。 一切正常。我可以看到数据库表中保存的信息。

When 用户注销从应用程序中,所有表都通过 appDatabase.clearAllTables() 方法调用清除。

问题是在后续登录时,数据库中没有插入任何信息但我的 Rx 调用没有抛出任何错误。

我尝试使用日志记录和调试,但一切看起来都很正常。

日志记录显示正在执行的以下操作:登录 -> 从 BE 获取用户信息 -> 保存会话 -> 保存用户。

调试时,我可以看到用户信息正在 UserDao_Impl 的 insertUser() 方法中处理。

在应用程序中,我使用 RxJava2 版本 2.2.2、Room 持久性库版本 1.1.1、Dagger 版本 2.19 提供依赖项。

这是我的代码片段:

LoginUserUseCase.java

public Completable execute(@NonNull LoginInfo loginInfo) {
    Completable loginAndSaveSession = sessionRepository.loginUser(loginInfo)
                                                    .flatMapCompletable(
                                                            session -> sessionRepository.saveSession(
                                                                    session));
    Completable getAndSaveUserInfo = userRepository.getRemoteUserInfo()
                                                   .flatMapCompletable(
                                                           user -> userRepository.saveUser(
                                                                   user));
    return loginAndSaveSession.andThen(getAndSaveUserInfo);
}

UserRepository.java

public Completable saveUser(@NonNull User user) {
    return Completable.fromAction(() -> userDao.insertUser(user));
}

UserDao.java

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertUser(User user);

LogoutUserUseCase.java

public Completable execute() {
    return Completable.fromAction(() -> appDatabase.clearAllTables());
}

更新(问题已解决):在这个 bug 上浪费了一天的时间。最后了解到其他一些库可能会影响应用程序与 Room 的工作。结果发现Android 调试数据库库我曾经用来查看设备上的数据库has a bug https://github.com/amitshekhariitbhu/Android-Debug-Database/issues/137在您使用它的帮助打开一次数据库后,它会破坏数据库.

回到斯特索。


None

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

RxJava2 + Room:clearAllTables() 调用后数据未插入数据库 的相关文章

  • 计算Android设备的PPI

    如何计算 Android 设备的 PPI 最特别的是 Android 平板电脑 请注意 我想计算设备的 PPI 而不是 DPI 就像一二三一样简单 让我们来计算一下PPI to Nexus 5 例如 float LCD Diagonal 4
  • Android webview 滚动不起作用

    我正在尝试在网络视图中向下滚动到页面底部 我正在使用谷歌在其教程中提供的网络视图示例 我正在使用这行代码来尝试滚动 但它不起作用 mWebView pageDown true 关于如何使其以编程方式滚动有什么建议吗 谢谢 public cl
  • 如何强制 Eclipse 将 xml 布局和样式显示为文本?

    我最近升级到带有 ADT 20 0 3 的 Eclipse 4 2 Juno 如果我查看旧项目中的布局或样式 Eclipse 只会向我显示其适当的基于控件的编辑器 我想编辑语法突出显示的 xml 文本 我没有找到将插件的编辑器切换到此模式的
  • Android:使用 OAuth 访问 google 任务时出现问题

    由于 google 任务没有公共 api 我想编写解决方法并像浏览器一样请求数据 然后解析结果以进一步显示 为了访问数据 我使用 google 实现了 OAuth 身份验证来访问此 url https mail google com htt
  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • Manifest Merger工具:替换失败

    我正在使用一个使用自己的 android theme 的库 因此在构建时收到以下错误 错误 55 9 任务 contacit processDebugManifest 执行失败 清单合并失败 AndroidManifest xml 中的属性
  • 从 Android 代码设置的 SECRET_CODE

    我知道如何使用清单文件中的秘密代码 它与此源代码配合良好
  • 如何在android中设置权限WRITE_SECURE_SETTINGS? [复制]

    这个问题在这里已经有答案了 我正在尝试启用 4 0 以上的辅助功能服务设置 但它显示异常 即 引起原因 java lang SecurityException 权限拒绝 写入安全设置需要 android permission WRITE S
  • 如何在手机缓存中保存用户名和密码

    我有一个用户登录应用程序 它需要用户的电子邮件和密码 我想将电子邮件和密码保存在手机缓存中 以便用户不必再次输入 有什么办法可以将数据保存在Android缓存中吗 我认为你需要使用SharedPreference用于在设备中使用应用程序时保
  • 如何在TableLayout中创建三列

    我正在开发一个使用的屏幕TableLayout 在这里我可以轻松创建两列 但我怎样才能创建三列呢 这里有一个例子
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 有关 ListView 自定义行布局项目上的 onClick() 事件的帮助

    我有一个 ListView 其行由我格式化 每行都有 ImageView 和 TextView 的混合 我还实现了自己的适配器 并且能够通过它绘制每一行 现在 我想要这样的东西 用户单击 ImageView 不是行上的其他任何位置 但只有此
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • Android:RecyclerView 不显示片段中的列表项

    有人可以帮我尝试让我的 RecyclerView 出现吗 如果我不在片段中实现它 就会出现这种情况 然而 当我尝试将其实现到片段中时 CarFront 中的其他 XML 代码与 RecyclerView 分开显示 我的日志中收到此错误 E
  • 在 KitKat 4.4.2 中获取 SDard 路径和大小

    我在 Google Play 上有一个设备信息应用程序 在该应用程序中我有存储信息 我知道 Android 4 4 在访问外部 SD 卡方面发生了一些变化 内部似乎没有给我带来问题 我的问题是 如何可靠地获取 KitKat 上 SD 卡的大
  • Android studio - 如何查找哪个库正在使用危险权限?

    我正在尝试将 apk 上传到 google play 商店 但令我惊讶的是 我正在使用以下权限 Your APK is using permissions that require a privacy policy android perm
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android
  • Android应用程序可以像旧的普通java小程序一样嵌入到网页中吗?

    我对 android 平台一无所知 也无法在互联网上找到这个基本问题的答案 更新 好的 我本身无法嵌入 Android 应用程序 但是我可以在 Android Webbrowser 中嵌入 Java 的东西吗 不可以 您无法将 Androi
  • 如何在片段中实现 onBackPressed() 和意图?

    我知道 onBackPressed 是活动中的一种方法 但是 我想在片段中使用该功能 以便当按下后退按钮时 它会通过 Intent 重定向到另一个活动 有什么办法解决这个问题吗 public class News Events fragme

随机推荐

  • 带 R 的地图:无法更改点/坐标的投影

    我想绘制一个具有多个点 也称为纬度和经度坐标组合 的世界地图 我不想使用墨卡托 因此我重新投影世界地图的数据和我的坐标 当世界的投影发生变化时 所有点都会突然放置在地图的中间 这是一种常见行为 当投影不对齐时 请参阅https www ea
  • 沿一个坐标轴的 3D 倾斜变换矩阵

    有没有一种方法可以计算沿一个坐标轴的倾斜变换矩阵 给定倾斜角度 如下 这应该在很大程度上适用于使用变换矩阵倾斜对象 特别是使用 glMultMatrix matrix matrix1 1 0 0 0 tan a 1 0 0 0 0 1 0
  • Cordova 视频编辑器插件 InvalidOutputFormatException

    我在用着科尔多瓦插件视频编辑器 https www npmjs com package cordova plugin video editor处理以前录制的视频 该插件开始转换 但由于某种原因失败 我得到的错误是这样的 net yprest
  • 该程序集是由比当前加载的运行时更新的运行时构建的,无法加载

    我收到此错误 无法加载文件或程序集 Twitterizer2 Asynchronous 或其中之一 它的依赖项 该程序集是由比 当前已加载运行时且无法加载 但我已经从我的引用中删除了 twitterizer2 Asynchronous 库
  • 如何管理服务器上的数据库连接?

    我的 Web 应用程序中的数据库连接存在严重问题 由于我对单例数据库类的整个应用程序使用单个数据库连接 因此如果我尝试并发数据库操作 两个用户 数据库将回滚事务 这是我使用的静态方法 所有线程 servlet 都调用静态 Database
  • 当单元格更改时,VBA 运行宏,但如果通过宏则不运行

    好吧 我不确定这是否容易实现 但我会尝试 如果单元格发生更改 我使用此子程序来执行一些宏 Private Sub Worksheet Calculate Dim target As Range Set target Range b4 If
  • 将蛇形字符串转换为标题大小写

    我有以下蛇形变量big animal我想将其转换为Big Animal 我的方法是str gt str replace w g g gt g 1 toUpperCase 但我不断得到bigAnimal 但我想保留空格并将第一个字母大写 另一
  • C - 未定义的引用 - 是否有使用 -lm 编译的替代方法?

    我有一个很像这个问题的问题here https stackoverflow com questions 5248919 c undefined reference to sqrt其中错误是 未定义对 sqrt 的引用 我了解如何在编译时使用
  • Python 连接列表中的数组

    我有一个相同大小的数组列表 列表 z 包含 gt gt gt z 0 Out 24 array 27 56272878 952 8099842 3378 58996244 4303 9692863 gt gt gt z 1 Out 25 a
  • 如何在 Google Chrome 中暂时禁用 websocket?

    我想暂时禁用 Google Chrome 中的 websocket 来调试 javascript 以确保它适用于任何不支持 websocket 的浏览器 首先 我想说有更好的机制可以在无 websocket 环境中测试 JavaScript
  • 限制对 ASP.Net MVC 站点的匿名访问的问题

    每当我限制 MVC 站点中的匿名访问时 我都会收到 404 错误 应用程序中的服务器错误 无法找到该资源 描述 HTTP 404 您正在查找的资源 或其依赖项之一 可能已被删除 名称已更改或暂时不可用 请检查以下 URL 并确保其拼写正确
  • 跨不同程序开发的库的 Subversion 存储库布局

    我负责几个 相当小的 程序 它们通过不同的库共享大量代码 我想知道开发不同程序 和库 的最佳存储库布局是什么 并使库在所有程序之间保持同步 为了便于讨论 我们假设有两个带有两个库的程序 Program1 Library1 Library2
  • 检查文件是否存在的最快方法[重复]

    这个问题在这里已经有答案了 我使用的方法只是尝试 fopen 要检查的文件 does file exist char fname 999 whatever constructed during execution FILE fp NULL
  • sql.Identifier 不带引号

    我在网上搜索 sql Identifier without quoting 并且这个帖子 https stackoverflow com questions 43877210 how to remove the quotes from a
  • R 闪亮登录黑客

    在尝试了 RStudio Shiny Pro Server 的评估后 我对登录 身份验证机制不太感兴趣 因为它们不是管理客户端访问闪亮应用程序的用户帐户的简单机制 因此 我试图在 Shiny 中创建自己的登录机制 除了在shinydashb
  • .NET 客户端编程中出现异常“AMQP 操作被中断”(代码=406)

    我有一个 2 8 2 RabbitMQ 服务器和一个 2 8 2 客户端 dll 有声明队列并获取消息的代码 它工作正常 所有参数都正确 IModel channel null ConnectionFactory factory new C
  • Windows 工作流程 4.0 InstancePersistenceCommand 错误

    我有一个 wcf 工作流程 其中有三个按顺序排列的接收活动 IE 1 接收申请 2 经理1批准 3 最终经理批准 我的问题是 我能够使用客户端应用程序中的工作流程并调用第一个 接收应用程序活动 但是当我尝试调用第二个 manager1 批准
  • Android 中的轮播动画

    请参阅下面的屏幕 我尝试使用封面流来实现此动画 就像我们作为轮播动画一样 但我没有得到与屏幕中所示相同的效果 如果有人做过这种类型的动画 请将代码片段发送给我 我前段时间在我的应用程序中遇到了类似的问题 虽然我没有处理过您在图像右下角显示的
  • 在 R 中的同一张图上绘制多列[重复]

    这个问题在这里已经有答案了 我有以下数据框 A B C D Xax 0 451 0 333 0 034 0 173 0 22 0 491 0 270 0 033 0 207 0 34 0 389 0 249 0 084 0 271 0 54
  • RxJava2 + Room:clearAllTables() 调用后数据未插入数据库

    成功后在我的Android应用程序中login我将会话信息保存在 Room 中 然后从 BE 检索用户信息并保存它 一切正常 我可以看到数据库表中保存的信息 When 用户注销从应用程序中 所有表都通过 appDatabase clearA