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

问题描述 投票:0回答:1

我正在为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的用处不大。

android parse-platform android-room parse-server parse-sdk-android
1个回答
0
投票

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

在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"))

我使用这种方法后来,这使得与服务器的同步变得非常困难。

等待更好的解决方案

© www.soinside.com 2019 - 2024. All rights reserved.