在 Parse SDK Android 中使用未保存的 id null 固定对象查询本地数据存储

Posted

技术标签:

【中文标题】在 Parse SDK Android 中使用未保存的 id null 固定对象查询本地数据存储【英文标题】:Query on local datastore with unsaved pinned object of id null in Parse SDK Android 【发布时间】:2020-01-16 14:30:12 【问题描述】:

我正在使用 Parse sdk for android

在离线模式下, 我创建了一些解析对象并使用

固定它们
  ...
  ParseObject.pinAll(cartItems)
  orderObject.pin()       //orderObject.objectId() returns null!
  ...

稍后当我在我使用的 localDatastore 中查询 cartItems 时

    ...
    query.whereEqualTo("order", orderObject);
    query.fromLocalDatastore().ignoreACLs();
    ...

但是查询没有结果,可能是因为orderObject的objectId为null。

有什么方法可以成功执行这个查询吗?

如果解析无法做到这一点,我应该去 Room 数据库 离线存储数据还是有更好的选择?

感谢任何帮助。

编辑:

有两个子类

Order extends ParseObject 
OrderIte extends ParseObject

我创建了一些 OrderItem-s 和一个订单。 我把订单指针放在 OrderItem-s 并将它们全部固定。

稍后当我在本地数据存储中查询 OrderItem 类时 我想检索特定订单的 OrdeItem-s。 所以在我设置的 OrderItem 查询中

query.equaTo("order",myOrder.getObjectId())

但是由于设备一直处于离线状态 myOrder.getObjectId() 返回 null 并且查询找不到 orderItems 我的订单

Expected query -> Select all from OrderItem where order = myOrder.getObjectId()
Actual query parse makes -> Select all from OrderItem where order = null

null,因为对象离线存储在本地数据存储中。

ParseObject pinInBackground returning null objectId

这会使基本查询失败并降低 LocalDatastore 的用处。

【问题讨论】:

您要查询的类是什么?它与订单有什么关系?你也固定了这个类的对象吗? 问题已更新。请再次检查 你试过query.equaTo("order",myOrder)而不是query.equaTo("order",myOrder.getObjectId())吗?正如您在this 链接的第一个示例中看到的那样,它应该是正确的方式。 代码可能会有所不同。但我按照文档做了。我确信代码没有错误。它在于 objectId 为 Offline 对象提供 null 你试过我的建议了吗? 【参考方案1】:

对我来说有点可行的解决方案是:

在OrderItem-s中设置Order的指针时

而不是

orderItem.put("order",myOrderObject)

我用

String randomId = generateRandomString()
myOrderObject.put("temp_orderOfflineId",randomId)
orderItem.put("order_id",randomId )

在查询中 而不是

orderItemquery.equaTo("order",myOrder.getObjectId())

我用

query.equaTo("order_id",myOrder.getString("temp_orderOfflineId"))

我使用这种方法 这会导致与服务器同步变得非常困难,非常困难。

等待更好的解决方案

【讨论】:

以上是关于在 Parse SDK Android 中使用未保存的 id null 固定对象查询本地数据存储的主要内容,如果未能解决你的问题,请参考以下文章

在 Parse SDK Android 中使用未保存的 id null 固定对象查询本地数据存储

使用 Parse Android SDK 实现 OR 条件?

Parse SDK Android - Facebook Graph API v2.0

推送通知未在Android 8.0中使用解析sdk显示

集成 Parse-SDK-JS 以响应原生应用程序

新 Parse Android SDK 附带的新 GCM(C2DM) 权限是不是会禁用当前应用用户的自动更新?