这是我提出的第一个问题,希望有人能帮助我。我环顾四周,发现关于这个主题的任何内容都对我的情况没有帮助,这就是为什么我求助于发布帮助请求。
我有一个包含以下类的 parse.com 数据库设置:
用户、关注者和项目。
Followers 包含两列 follower 和 following 以跟踪哪个用户正在关注哪个用户。
Items 包含一个author 列,它是一个指向User 对象的指针。
我的目标是查询将返回 Items 对象的 ParseQueryAdapter。我现在必须访问Items 的路径是查询Followers 类以获取当前用户正在关注的用户 列表。然后使用这些用户对象作为指针查询 Items 类以查找关注的用户创建的项目。
这是一个图表:
Followers
follower following
------- ---------
UserA UserB
UserB UserC
UserB UserA
Items
author column1 column2
------ ------- -------
UserA foo bar
UserA foo2 bar2
UserB blah blah
UserC blah blah
基于上述数据库结构,我们假设currentUser 是UserB。如果 UserB 查询 Follower 表,他将检索他的关注者列表(UserC 和 UserA),然后我想查询并检索由 UserB 关注的那些创建的所有项目(根据上述结构应该返回 3 个结果).基于我对 parse.com 如何工作的有限理解,我尝试了以下方法:
public class ItemListItemAdapter extends ParseQueryAdapter<ParseObject>{
public ItemListItemAdapter(Context context) {
super(context, new ParseQueryAdapter.QueryFactory<ParseObject>() {
public ParseQuery<ParseObject> create() {
ParseUser currentUser = ParseUser.getCurrentUser();
ParseQuery<ParseObject> followerQuery = new ParseQuery("Followers");
followerQuery.whereEqualTo("follower", currentUser);
ParseQuery<ParseObject> itemQuery = new ParseQuery("Items");
itemQuery.whereMatchesQuery("author", followerQuery);
return itemQuery;
}
});
}
据我所知,我首先创建一个查询,该查询将获取 currentUser 正在关注的关注者。然后我应该有一个 User 对象列表,可用于查询 Items 类,其中 User 对象与关注者匹配,这样我就可以使用来自 Item 对象的正确数据填充我的 ListView 项目,但此查询返回零结果。
所以,要么我建模的一切都错了,要么我误解了关系的运作方式。任何帮助将不胜感激。
如果我删除 itemQuery 并只返回 followerQuery 那么它就可以工作 - 当我尝试将两者结合时(或者它可能是我用数据库中的数据结构使我的生活变得复杂,所以我也愿意接受有关重组的建议。
提前感谢您的帮助!
最佳答案
答案是不使用 whereMatchesQuery()
,而是使用 whereMatchesKeyInQuery()
。
这是一个使用 whereMatchesKeyInQuery()
的示例(不一定特定于此问题,但在评论中按要求演示了 whereMatchesKeyInQuery
的使用):
ParseQuery followerQuery = ParseQuery.getQuery("Followers");
followerQuery.whereEqualTo("following", ParseUser.getCurrentUser());
userQuery.whereMatchesKeyInQuery("objectId", "followerId", followerQuery);
所以参数是:
query1.whereMatchesKeyInQuery("key_value_in_query1", "key_value_to_match_in_query2", query2);
关于Android:查询多个类的ParseQueryAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25234184/