我正在为Android使用Parse sdk。
在离线模式下,我创建了一些解析对象,并使用
将其固定 ...
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和一个订单。我将Order指针放在OrderItem-s中并将其全部固定。
稍后在本地数据存储区中查询OrderItem类时我想检索OrdeItem-s的垂直顺序。因此,在OrderItem查询中,我设置了
query.equaTo("order",myOrder.getObjectId())
但是由于设备一直处于离线状态myOrder.getObjectId()
返回null,查询无法找到以下商品的orderItemsmyOrder
Expected query -> Select all from OrderItem where order = myOrder.getObjectId()
Actual query parse makes -> Select all from OrderItem where order = null
null,因为对象已脱机存储在localdatastore中。
ParseObject pinInBackground returning null objectId
这会使基本查询失败,并使得LocalDatastore的用处不大。
对我来说有些可行的解决方案是:
在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"))
我使用这种方法后来,这使得与服务器的同步变得非常困难。
等待更好的解决方案