关系查询Parse.com android

关系查询Parse.com android,android,parse-platform,relational,Android,Parse Platform,Relational,所以我正在使用Parse.com作为后端实现一个应用程序,Parse中基本上有3个类。第一个是用户我有用户信息的地方,还有图库我有图片的地方”,比如Instagram,最后是Follow类,我有following和followers的关系 现在我有一个活动,我必须只显示我跟踪的人的所有图像。我无法编写正确的关系查询来获得正确的结果 因此,这是显示数据库中所有图像的代码,而不仅仅是针对我跟踪的人。 public class FollowingImages extends ParseQueryAda

所以我正在使用Parse.com作为后端实现一个应用程序,Parse中基本上有3个类。第一个是用户我有用户信息的地方,还有图库我有图片的地方”,比如Instagram,最后是Follow类,我有following和followers的关系

现在我有一个活动,我必须只显示我跟踪的人的所有图像。我无法编写正确的关系查询来获得正确的结果

因此,这是显示数据库中所有图像的代码,而不仅仅是针对我跟踪的人。

public class FollowingImages extends ParseQueryAdapter<ParseObject> {



public FollowingImages (Context context) {

    super(context, new ParseQueryAdapter.QueryFactory<ParseObject>() {
        public ParseQuery create() {

            ParseQuery<ParseObject> query = ParseQuery.getQuery("Gallery");
            query.include("createdBy");
            return query;

        }
    });
}

// Customize the layout by overriding getItemView
@Override
public View getItemView(final ParseObject object, View v, ViewGroup parent) {

    if (v == null) {
        v = View.inflate(getContext(), R.layout.list_item, null);
    }

    super.getItemView(object, v, parent);

    // retrieving the Images from Parse.com

    return v;
}
public类扩展ParseQueryAdapter{
公共图像(上下文){
super(上下文,新的ParseQueryAdapter.QueryFactory(){
公共ParseQuery创建(){
ParseQuery=ParseQuery.getQuery(“画廊”);
查询。包括(“createdBy”);
返回查询;
}
});
}
//通过覆盖getItemView自定义布局
@凌驾
公共视图getItemView(最终ParseObject对象、视图v、视图组父对象){
如果(v==null){
v=视图.充气(getContext(),R.layout.list_项,null);
}
super.getItemView(对象,v,父对象);
//从Parse.com检索图像
返回v;
}
我不知道应该在构造函数或getItemView中的何处应用关系查询


非常感谢您的帮助。

您可以使用matchesKeyInQuery约束方法

可以使用matchesKeyInQuery方法获取对象,其中一个键与另一个查询生成的一组对象中的一个键的值相匹配

(之后)

所以在你的情况下(我是手写的),可能是这样的:

ParseQuery<Follow> whoDoIFollow = ParseQuery.getQuery("Follow")
                                          .select("From")
                                          .whereEqualTo("To", <user>);

ParseQuery<Gallery> theirImages = ParseQuery.getQuery("Gallery")
                                          .whereMatchesKeyInQuery("createdBy", "From", whoDoIFollow);
ParseQuery whoDoIFollow=ParseQuery.getQuery(“Follow”)
.选择(“从”)
.其中,以下简称“至”);
ParseQuery theirImages=ParseQuery.getQuery(“画廊”)
.whereMatchesKeyInQuery(“createdBy”、“From”、“whoDoIFollow”);
如果我是正确的,那么从数据传输的角度来看,这应该是一种最佳方式,因为一切都发生在服务器端,您只会得到结果(图像)


替换

public FollowingImages (Context context) {

    super(context, new ParseQueryAdapter.QueryFactory<ParseObject>() {
        public ParseQuery create() {
             ParseQuery<ParseObject> whoDoIFollow = ParseQuery.getQuery("Follow")
                                                         .select("From")
                                                         .whereEqualTo("To", <user>);

             ParseQuery<ParseObject> theirImages = ParseQuery.getQuery("Gallery")
                                                         .whereMatchesKeyInQuery("createdBy", "From", whoDoIFollow);

             return theirImages;
        }
    });
}
公共图像(上下文){
super(上下文,新的ParseQueryAdapter.QueryFactory(){
公共ParseQuery创建(){
ParseQuery whoDoIFollow=ParseQuery.getQuery(“Follow”)
.选择(“从”)
.其中,以下简称“至”);
ParseQuery theirImages=ParseQuery.getQuery(“画廊”)
.whereMatchesKeyInQuery(“createdBy”、“From”、“whoDoIFollow”);
归还他们的护照;
}
});
}

您将希望对查询应用约束

ParseQuery<ParseObject> query = ParseQuery.getQuery("Gallery");

query.whereEqualTo("createdBy", "theUserId");
query.findInBackground(new GetCallback<ParseObject>() {
  public void done(ParseObject object, ParseException e) {
    if (object == null) {
      Log.d("score", "The find request failed.");
    } else {
      Log.d("score", "Retrieved the object.");
    }
  }
});
ParseQuery=ParseQuery.getQuery(“画廊”);
whereEqualTo(“createdBy”,“theUserId”);
findInBackground(新的GetCallback(){
公共无效完成(ParseObject对象,parsee异常){
if(object==null){
Log.d(“score”,“查找请求失败”);
}否则{
Log.d(“分数”,“检索对象”);
}
}
});

有关更多详细信息,请咨询官方。

这不仅仅是一个用户ID,我希望看到我跟踪的所有用户的图像。您可以使用or()组合多个条件函数:您需要首先查询关注者列表以找到所需的用户ID。然后您可以创建一个查询列表,并使用or()方法将其组合到单个查询中。我建议您应用我的代码仅获取一个您正在跟踪的人,然后一旦成功,尝试使用or()将其组合到单个查询中。要与or()组合,它们必须来自一个类。与来自Follow类或gallery类的所有查询一样。我的示例演示了如何为单个用户ID获取gallery,您可以进行许多查询并将它们与or()组合在查找DinBackground之前。您还可以使用MatBos提供的信息来获取正在跟踪的用户列表。您链接到JavaScript文档,并将查询限制为User类不存在但Follow类不存在的值。请记住,默认结果限制为100个对象,这可能会导致奇怪的外观ng结果…您应该编辑您的答案以包含标签的正确文档,并编辑代码示例以确保正确,我将删除否决票。感谢您发现。更正。