![](/img/trans.png)
[英]Querying local datastore in using ParseQueryAdapter gives 0 results even after successfully pinning
[英]ParseQuery gives 0 objects when querying from local datastore even after successfully pinning
我正在使用parse.com的Android SDK,並且遇到了一個特殊的問題。
從片段的onCreate中:
這是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);
注意:
Message
這樣的其他類,也使我懷疑我的ChatGroup類出了問題。 ChatGroup
類中添加了兩個字段:name(String)和messages(Relation),具有對名為Admin的角色的讀寫訪問權限。 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.