关系查询Parse.com android

时间:2015-08-11 20:20:11

标签: android parse-platform relational

所以我使用Parse.com作为后端实现应用程序,Parse基本上有3个类。第一个用户我有用户信息,图库我有图像"比如Instagram,最后关注我有以下关系和关注者的类。

现在我有一项活动,我必须为我所关注的人显示所有图像。我无法编写正确的关系查询以获得正确的结果。

因此,这是显示所有数据库中的图片的代码,不仅适用于我之后的人。

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;
}

我不知道应该在构造函数中或getItemView中应用关系查询的位置。

请任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用matchesKeyInQuery约束方法。

  

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

(在parse docs之后)

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

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

ParseQuery<Gallery> theirImages = ParseQuery.getQuery("Gallery")
                                          .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;
        }
    });
}

答案 1 :(得分:1)

您需要对查询应用约束。

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.");
    }
  }
});

有关详细信息,请参阅官方guide