Я работаю над приложением Android, которое использует Parse и должно работать в автономном режиме.
Каждый раз, когда приложение запускается на заставке, оно рекурсивно запускает выборку для извлечения всех данных объекта класса из базы данных. Он будет извлекать почти 200 объектов в локальное хранилище данных (от простых объектов до объектов со связями и указателей на эти простые объекты), если пользователь находится в сети.
В автономном режиме он должен загружать эти объекты из локального хранилища данных и работать так же, как онлайн-версия.
Проблема в том, что он не будет загружать некоторые объекты, где я должен проверить, равен ли ParseUser.objectId
указатель на пользователя в объекте (ах), который я хочу найти. Это не работает, если вы не в сети. 0 объектов возвращено. Если вы находитесь в сети, он работает как положено.
Я проверил ParseUser.objectId
и ACL
с. Они точно такие же. И онлайн, и оффлайн пользователь - это один и тот же пользователь (не аноним).
Parse API Call:
fun getItems(c: Context, itemState: Int, user: ParseUser, isShortcut: Boolean,
callback: (List<ParseObject>?, Boolean, ParseException?) -> Unit){
val q = ParseQuery.getQuery<ParseObject>(ITEM_CLASS)
q.whereEqualTo(ITEM_STATE, itemState)
q.include(POINTER_OBJECT)
q.include(POINTER_OBJECT_ORGANIZATION)
if (itemState == ITEM_STATE_NEXT){
q.whereDoesNotExist(ITEM_USER_ID)
q.whereGreaterThan(NEXT_DATE, getCurrDate())
q.addAscendingOrder(NEXT_DATE)
q.whereExists(NEXT_DATE)
} else {
if (isOnline(c)){
createLog("Reports", "ONLINE:\n" +
"UserID: ${user.objectId}\n" +
"UserACL: ${user.acl}\n" +
"PublicRead: ${user.acl?.publicReadAccess}\n" +
"PublicWrite: ${user.acl?.publicWriteAccess}")
} else {
createLog("Reports", "OFFLINE:\n" +
"UserID: ${user.objectId}\n" +
"UserACL: ${user.acl}\n" +
"PublicRead: ${user.acl?.publicReadAccess}\n" +
"PublicWrite: ${user.acl?.publicWriteAccess}")
}
q.whereEqualTo(USER_ID, user.objectId)
}
if (!isOnline(c)) {
q.ignoreACLs()
q.fromLocalDatastore()
}
q.findInBackground { itemList, err ->
itemList?.let {reports ->
ParseObject.pinAllInBackground(reports)
createLog("dataPinned", "${reports.size}")
}
callback(itemList, isShortcut, err)
}
}