Запрос к локальному хранилищу данных с несохраненным закрепленным объектом с идентификатором null в Parse SDK Android - PullRequest
0 голосов
/ 16 января 2020

Я использую Parse SDK для android.

В автономном режиме я создал несколько объектов анализа и закрепил их, используя

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

Позже, когда я запросил cartItems в localDatastore i используйте

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

, но запрос не дает результата, возможно, потому, что objectId для orderObject имеет значение null.

Есть ли способ успешно выполнить этот запрос?

Если синтаксический анализ не в состоянии сделать это, я должен go для База данных комнат для хранения данных в автономном режиме или есть лучшая альтернатива?

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ:

Есть два подкласса

Order extends ParseObject 
OrderIte extends ParseObject

Я создаю несколько OrderItem-ов и один ордер. Я помещаю указатель Order в OrderItem-s и закрепляю их все.

Позже, когда я запрашиваю класс OrderItem в локальном хранилище данных, я хочу получить OrdeItem-s для чередующегося порядка. Таким образом, в запросе OrderItem я устанавливаю

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

Но поскольку устройство находится в автономном режиме, все время myOrder.getObjectId() возвращает ноль, и запрос не может найти orderItems для myOrder

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

ноль поскольку объект хранится в автономном режиме в localdatastore.

ParseObject pinInBackground, возвращающий нулевой objectId

Это делает базовые c запросы неудачными и делает LocalDatastore менее полезным.

1 Ответ

0 голосов
/ 19 января 2020

Несколько работающее решение для меня:

при установке указателя Order в OrderItem-s

вместо

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

Я использую этот подход Это позже делает синхронизацию c с сервером сложной, очень сложной.

В ожидании лучшего решения

...