在 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 条件?