简体   繁体   English

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

[英]Query on local datastore with unsaved pinned object of id null in Parse SDK Android

I'm using Parse sdk for android.我正在为 android 使用 Parse sdk。

In offline mode, I created some parse objects and pinned them using在离线模式下,我创建了一些解析对象并使用固定它们

  ...
  ParseObject.pinAll(cartItems)
  orderObject.pin()       //orderObject.objectId() returns null!
  ...

Later when i query cartItems in localDatastore i use稍后当我在 localDatastore 中查询 carItems 我使用

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

but the query gives no result,probably because objectId of orderObject is null.但查询没有给出结果,可能是因为 orderObject 的 objectId 为空。

Is there any way to execute this query successfully?有没有办法成功执行此查询?

If parse is incapable to do this should i go for Room database to store the data offline or is there any better alternative?如果解析无法做到这一点,我应该去Room 数据库离线存储数据还是有更好的选择?

Any help is appreciated.任何帮助表示赞赏。

EDIT:编辑:

There are two subclasses有两个子类

Order extends ParseObject 
OrderIte extends ParseObject

I create some OrderItem-s and one order.我创建了一些 OrderItem-s 和一个订单。 I put Order pointer in OrderItem-s and pin them all.我将 Order 指针放在 OrderItem-s 中并将它们全部固定。

Later when i query OrderItem class in local datastore I want to retrieve OrdeItem-s for a perticular order.稍后当我在本地数据存储中查询 OrderItem 类时,我想检索 OrdeItem-s 以获得特定订单。 So in the OrderItem query i set所以在我设置的 OrderItem 查询中

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

But since the device is offline the whole time myOrder.getObjectId() returns null and the query fails to find the orderItems for myOrder但是由于设备始终处于离线状态myOrder.getObjectId()返回 null 并且查询无法找到 myOrder 的 orderItems

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

null as the object is stored offline in localdatastore. null 因为对象离线存储在 localdatastore 中。

ParseObject pinInBackground returning null objectId ParseObject pinInBackground 返回 null objectId

This makes basic queries fail and makes the LocalDatastore less useful.这会使基本查询失败,并使 LocalDatastore 不太有用。

A somewhat working solution for me is:对我来说有点工作的解决方案是:

when setting pointer of Order in OrderItem-s在 OrderItem-s 中设置 Order 指针时

instead of代替

orderItem.put("order",myOrderObject)

i use我用

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

and in query instead of并在查询中而不是

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

i use我用

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

I use this approach This later makes sync with server hard,very hard.我使用这种方法 这以后很难与服务器同步,非常困难。

Waiting for better solution等待更好的解决方案

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM