【问题标题】:Realm Flowable query filtering by the current date按当前日期过滤的 Realm Flowable 查询
【发布时间】:2021-08-05 16:59:18
【问题描述】:

上下文

我正在开发一个离线的第一个应用程序,我基本上是在一个应该显示商店优惠列表的屏幕上工作 - 折扣、优惠券等 - 我正在尝试依赖 Realm 查询通过 Flowables 来获取数据,我希望该应用程序对我们在 Realm DB 上拥有的内容 100% 诚实。我的意思是,如果数据库发生变化,应用程序应该立即刷新 UI,这就是我使用 Flowables 的原因。

问题

到目前为止,这种方法运行良好,但我偶然发现了这种情况有点棘手。我需要像这样显示这个商店优惠列表:

private val offersFlowable: Flowable<RealmResults<RealmOffer>>
        get() {
            val realm = Realm.getDefaultInstance()
            return realm.where(RealmOffer::class.java)
                .equalTo("userId", CredentialManager.getInstance().getUserId())
                .and()
                .beginGroup()
                    .isNotNull("expiryDate").and().greaterThan("expiryDate", Date())
                .endGroup()
                .findAll()
                .asFlowable()
        }

查询本身完美运行,我获取尚未过期的用户优惠。唯一的问题是似乎每次我想刷新数据时都需要重新创建这个查询。为什么?因为Date()。我打开呈现此RecyclerView 商店优惠列表的Activity,我实例化查询并开始监听更改 - 到目前为止一切都很好 - 但如果我有一个即将在大约一分钟内到期的商店优惠,等待整整一分钟,然后执行 Pull To Refresh,过期优惠不会消失。同样,因为Date(),因为当前日期是在一分钟前实例化的,并且仍然是那个日期。

如果我终止应用程序或从头开始实例化 Activity,一切都会按预期进行,因为我再次实例化查询,因此获得了最新的 Date()

到目前为止我所做的尝试

  • 而不是在那里硬编码 Date() arg,在我的 ViewModel 中有一个 currentDate 属性 - 这个 Flowable 生活的地方 - 我有点希望如果日期 arg 是对 计算的引用 Kotlin 属性可以解决问题,但它不起作用。

  • 与上面相同,但我将 expiryDate 字段更改为 millis 而不是 Date

解决方法

因此,现在唯一可行的方法是每次执行 PTR 时重新实例化 Flowable 查询,这样我就可以传递一个最新的 Date() arg 并且查询按预期工作。

我的问题

有什么方法可以解决这个问题,而不必一直重新实例化查询?

谢谢!感谢所有反馈! ????

【问题讨论】:

    标签: android kotlin realm


    【解决方案1】:

    我希望我已经理解你的问题了,我想提一个建议可能对你有帮助。由于一次又一次地请求数据库,当前的解决方法肯定不是一个好的选择。所以我认为在这种情况下更好的是,

    在 RecyclerView 上渲染数据之前,请执行以下操作;

    1 - 获取每个项目的到期日期和时间。

    2 - 获取当前日期和时间。

    3 - 比较两者并找出差异。

    现在,如果差值是 -ve 值,则表示该项目已过期,您不必在 recyclerView 中显示它。当然,该项目在 ArrayList/List 中可用,但它没有在 recyclerView 上呈现。


    否则第二个选项


    在将商店优惠数据添加到数据库时,只需为每个优惠注册一个PendingIntent 和一个AlarmManager,并将Expriy-time 设置为PendingIntent 的闹钟时间。

    这样,当优惠到期时,它会发出警报。所以,在这里你可以施展魔法,当PendingIntent 触发时,只需从那里更新你的数据库和recyclerview。这样您就可以自动处理每个报价。

    如果有帮助,请告诉我。

    编码愉快:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-16
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多