我有几个定期从服务器更新的表 ( Benefit, Branch, Coupon) 和另外两个仅本地的表 ( FavoriteBenefit, UsedCoupon)。ER图如下所示:

每当Benefit在服务器上删除a 时,我还想从FavoriteBenefit. 为此,我可以使用onDelete = ForeignKey.CASCADE,每当Benefit数据库中不再存在父级时,它FavoriteBenefit也会被删除。听起来不错。
每当我@Insert(onConflict = OnConflictStrategy.REPLACE)用来更新数据库中的好处时就会出现问题
。REPLACE实际上是一个执行DELETE和INSERT,但DELETE在内部触发onDelete的FavoriteBenefit,因此,在该表中的所有数据被删除。
(Coupon和UsedCoupon表也会出现类似的问题。)
我正在寻找一种方法来暂时禁用外键约束,直到事务结束。也就是说,不要在事务期间验证外键,而只在事务结束时验证。我仍然希望 Room 自动删除没有有效父级的实体。
似乎通过在定义上设置将外键标记为延迟应该完全符合我想要实现的目标。deferred = true@ForeignKey
布尔延迟 ()
外键约束可以推迟到事务完成。如果您在单个事务中对数据库进行批量插入,这将非常有用。默认情况下,外键约束是即时的,但您可以通过将此字段设置为 true 来更改它。
但即使我设置了deferred标志,它似乎也没有效果,因为FavoriteBenefit每次仍然被删除。
我是否deferred错误地理解了标志?
我正在寻找setupWithNavController(Toolbar, NavController)AppBar的 Compose 变体,以便在导航目的地发生变化时自动更新向上按钮。到目前为止我还没有发现任何有用的东西。
Compose 中是否认为这是一个糟糕的设计?或者是否有一些简单的方法可以实现我没有看到的相同目标?
如何并行运行多个协程并仅返回最先完成的协程的值?
在现实生活中,我有两个数据源- 数据库和API服务。我不在乎数据从哪里来,我只需要快速。完成查询后,如何查询数据库和API服务并取消另一个请求?
在RxJava世界中,这等于Amb运算符。如何使用协程实现类似的行为?
我想使用通用类型的 Moshi 适配器。
\n这是我的通用类型适配器代码,
\nfun <T> getObjectFromJson(typeOfObject: Class<T>, jsonString: String): T? {\n val moshi = Moshi.Builder().build()\n val jsonAdapter: JsonAdapter<T> = moshi.adapter<T>(\n typeOfObject::class.java\n )\n return jsonAdapter.fromJson(jsonString)!!\n}\nRun Code Online (Sandbox Code Playgroud)\n该代码不起作用。它抛出一个错误,
\n\n\n平台类 java.lang.Class 需要显式注册 JsonAdapter
\n
但是,如果我不\xe2\x80\x99t 使用这样的泛型类型,
\nfun getObjectFromJson(jsonString: String): UserProfile? {\n val moshi = Moshi.Builder().build()\n val jsonAdapter: JsonAdapter<UserProfile> = moshi.adapter<UserProfile>(\n UserProfile::class.java\n )\n return jsonAdapter.fromJson(jsonString)!!\n}\nRun Code Online (Sandbox Code Playgroud)\n然后代码就可以正常工作了。
\n这是UserProfile类,
\n @Parcelize\n@JsonClass(generateAdapter = true)\ndata class UserProfile(\n @get:Json(name = "p_contact")\n val pContact: String? = null,\n\n @get:Json(name = …Run Code Online (Sandbox Code Playgroud) 使用Material Design 库中的TextInputLayout,我们可以使用各种结束图标模式进行密码编辑、文本清除和自定义模式。此外,如果我们使用任何样式,它将自动应用显示打开和关闭 V 形的特殊结束图标模式。Widget.MaterialComponents.TextInputLayout.*.ExposedDropdownMenu
各种图标模式示例:
鉴于结束图标的各种用例,我们决定在 中使用加载指示器InputTextLayout,使其看起来像这样:
应该如何着手实施呢?
android loading android-progressbar progress-bar material-components-android
android ×4
kotlin ×2
android-room ×1
deferred ×1
foreign-keys ×1
loading ×1
material-components-android ×1
moshi ×1
progress-bar ×1