簡體   English   中英

從本地數據存儲區查詢時,即使成功固定后,ParseQuery也會提供0個對象

[英]ParseQuery gives 0 objects when querying from local datastore even after successfully pinning

我正在使用parse.com的Android SDK,並且遇到了一個特殊的問題。

從片段的onCreate中:

  1. 從服務器獲取對象。
  2. 壓住他。
  3. 從本地數據存儲中獲取對象。

這是onCreate中的代碼片段:

ParseObject myChatGroup = ParseObject.createWithoutData("ChatGroup", "mOJGWRiLPC");
    myChatGroup.fetchInBackground(new GetCallback<ParseObject>() {
        @Override
        public void done(ParseObject chatGroup1, ParseException e) {
            if (e == null) {
                l.d("Fetched chat group: " + chatGroup1 + " from server");
                chatGroup1.pinInBackground(new SaveCallback() {
                    @Override
                    public void done(ParseException e) {
                        if (e == null) {
                            l.d("Successfully pinned chat group");
                            ParseQuery<ParseObject> chatGroupParseQuery = new ParseQuery<>("ChatGroup");
                            chatGroupParseQuery.fromLocalDatastore()
                                    .findInBackground(new FindCallback<ParseObject>() {
                                        @Override
                                        public void done(List<ParseObject> list, ParseException e) {
                                            if (e == null) {
                                                l.d("Found " + list.size() + " chat groups from local datastore");
                                            } else {
                                                e.printStackTrace();
                                            }
                                        }
                                    });
                        } else {
                            e.printStackTrace();
                        }
                    }
                });
            } else {
                e.printStackTrace();
            }
        }
});

這是日志:

Fetched chat group: ChatGroup { objectId: mOJGWRiLPC, name: Admin } from server
Successfully pinned chat group
Found 0 chat groups from local datastore

但這沒有任何意義! 我只是固定了一個對象,所以本地數據存儲區中如何有0個對象。 代碼非常簡單。 我究竟做錯了什么? SDK可能是一個錯誤嗎?
我已經嘗試了好幾天了,任何見識將不勝感激。

解析設置對我來說看起來不錯:

    ParseObject.registerSubclass(ChatGroup.class);
    Parse.enableLocalDatastore(this);
    Parse.initialize(this, AppProps.properties.appId,
            AppProps.properties.clientKey);
    ParseUser.enableRevocableSessionInBackground();
    Parse.setLogLevel(Parse.LOG_LEVEL_DEBUG);

注意:

  • 在嘗試與ParseUser對象相同的邏輯時,它可以正常工作。 甚至像我的Message這樣的其他類,也使我懷疑我的ChatGroup類出了問題。
  • 我在parse.com數據瀏覽器上的ChatGroup類中添加了兩個字段:name(String)和messages(Relation),具有對名為Admin的角色的讀寫訪問權限。
  • 當瀏覽到實際的解析數據庫(使用root訪問)時,我發現數據庫表( ParseObjects )確實包含了我固定的行。 但是不知何故,解析顯示查詢結果為0!

解析似乎不支持本地數據存儲上的ACL。 因此,解決此問題的最簡單方法是在查詢中執行ignoreACLs()-假設您確實在服務器端正確設置了角色/ acl,因此在本地固定的任何內容都應該已經獲得許可。

我發現了問題。 似乎更像是Android SDK解析錯誤。 我將其縮小為使用Android SDK使用特殊ACL檢索固定對象的問題。

最初,該對象具有ACL,因此只有角色“ Admin”(我創建的)才能讀寫。 有趣的是,我用來測試固定和查詢的用戶是“管理員”! 但是,當我更改了ACL以使公眾可以讀取但只有Admin可以寫入時,問題已解決!

我的理論是, 查詢本地數據存儲區的行為類似於公共查詢,無論進行查詢的用戶扮演什么角色 但是,如果有任何其他理論對此作出解釋,將不勝感激。 幸運的是,就我而言,我需要公共讀取訪問權限,但是對於某些需要限制讀取訪問權限ACL的用戶來說,此錯誤可能是一個巨大的失敗! 希望parse.com會盡快解決此問題。
這是一個很大的問題! 令我驚訝的是我找不到關於此問題的問題。

是的,因此基本上,您必須為當前用戶設置ACL並固定ACL,然后再固定聊天組。

ParseACL acl = new ParseACL();
acl.setReadAccess(ParseUser.getCurrentUser(), true);
ParseUser.getCurrentUser().setACL(acl);
ParseUser.getCurrentUser().pinInBackground();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM