Android:查询多个类的ParseQueryAdapter

标签 android parse-platform

这是我提出的第一个问题,希望有人能帮助我。我环顾四周,发现关于这个主题的任何内容都对我的情况没有帮助,这就是为什么我求助于发布帮助请求。

我有一个包含以下的 parse.com 数据库设置:

用户关注者项目

Followers 包含两列 followerfollowing 以跟踪哪个用户正在关注哪个用户。

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/

相关文章:

ios - 从 block 内返回查询

javascript - 公共(public)变量未正确更改

java - 重新安装 Eclipse 后无法再构建项目

android - 如何使用 Google Play 服务 API 客户端进行 Activity 识别

java - 为什么我的 Android 应用程序中的计算(Eclipse)出现错误?

java - 在 Canvas 上加载图片并在图片上叠加文字并保存

c# - 将 .Net int 数组转换为 Java.Lang.Object

ios - 指向博客文章的指针不包含属于该文章的回复(Parse、Swift、iOS)

android - Nativescript 和 FontAwesome

android - 使用 Parse 服务器进行数字验证