繁体   English   中英

来自本地数据存储区的Parse.com脱机查询返回0个对象

[英]Parse.com offline query from local datastore returns 0 objects

我正在开发使用Parse的Android应用程序,应该可以脱机工作。

每当应用程序在启动画面中启动时,它将以递归方式运行提取以从数据库中获取每个单个对象数据。 如果用户在线,它将把近200个对象提取到本地数据存储区(从简单对象到具有关系的对象和指向那些简单对象的指针)。

在脱机模式下,它应该从本地数据存储区加载这些对象,并且应该与在线版本一样。

问题是它不会加载一些对象,我必须检查ParseUser.objectId是否等于我想要找到的对象中的User的指针。 如果您处于离线状态,这不起作用。 返回0个对象。 如果您在线,则按预期工作。

我检查了ParseUser.objectIdACL 它们完全相同。 在线用户和离线用户都是同一个用户(非匿名用户)。

解析API调用:

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

你可以试着在这里改变这一行吗?

q.whereEqualTo(USER_ID, user)

暂无
暂无

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

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