我正在使用 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 的错误?
任何见解都将不胜感激,我几天来一直在努力寻找问题。
Parse 设置对我来说看起来不错:
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 课程有问题。 - 我
ChatGroup
在 parse.com 数据浏览器上的类中添加了两个字段:名称(字符串)和消息(关系),具有对名为 Admin 的角色的读写访问权限。 - 当浏览到实际的解析数据库(使用 root 访问)时,我发现数据库表 (
ParseObjects
) 确实包含我固定的行。但是以某种方式解析在查询它时显示 0 结果!