Android:ParseQueryAdapter用于查询多个类

时间:2014-08-11 00:00:40

标签: android parse-platform

这是我提出的第一个问题,希望有人可以帮助我。我环顾四周,这方面的任何内容都没有帮助我,这就是为什么我求助于帮助。

我有一个parse.com数据库设置,其中包含以下 Classes

用户关注者商品

关注者包含两列关注者关注,以跟踪哪位用户关注哪位用户。

包含作者列,该列是指向用户对象的指针。

我的目标是查找将返回 Items 对象的ParseQueryAdapter。我现在项目的路径是查询关注者类,以获取当前用户关注的用户列表。然后使用这些用户对象作为指针查询 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 所关注的关注者。然后我应该有一个用户对象列表,可用于查询用户对象与用户对象匹配的关键字,以便我可以使用 Item 对象中的正确数据填充我的ListView项,但此查询返回零结果。

所以要么我把一切都弄错了,要么我误解了关系的运作方式。任何帮助将不胜感激。

如果我删除了 itemQuery 并只返回 followerQuery 然后它就可以了 - 当我尝试将两者结合起来时问题就在于内部查询(或者它可能是我使用数据库中的数据结构使我的生活变得复杂,因此我也对重组提出建议。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

答案是不使用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);