I have a ParseQueryAdapter that will correctly display all posts if I allow it, but I'm trying to find a way to only display posts from friends. The relative bit of code is as follows:
public CustomAdapter(Context context) {
// Use the QueryFactory to construct a PQA that will only show
// Todos marked as high-pri
super(context, new ParseQueryAdapter.QueryFactory<ParseObject>() {
public ParseQuery create() {
ParseUser user = ParseUser.getCurrentUser();
ParseRelation<ParseUser> relation = user.getRelation("friends");
ParseQuery relationQuery = relation.getQuery();
relationQuery.whereExists("objectID");
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Post");
query.whereEqualTo("CreatedBy", relationQuery.whereExists("ObjectID"));
return query;
}
});
}
The data structures are as follows. A user has a friends relation. So I want to get that relation from them and look for objectID's which match the CreatedBy user of a post. One of the problems that I'm seeing is that the CreatedBy field is a pointer to a user, where the objectID in the Friend relation is a string. I've tried a lot of different things here, but I'm having trouble getting it to work.
So I'm not sure if I should be converting CreatedBy to a string, but I'm not sure how to do so where it would work for the entire query. Or perhaps I should be looking at each friend in the friends relation as a user, rather than looking at the objectID field.
What you want is the whereMatchesQuery()
method, e.g.:
public CustomAdapter(Context context) {
super(context, new ParseQueryAdapter.QueryFactory<ParseObject>() {
public ParseQuery create() {
ParseUser user = ParseUser.getCurrentUser();
ParseRelation<ParseUser> relation = user.getRelation("friends");
ParseQuery friendsQuery = relation.getQuery();
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Post");
query.whereMatchesQuery("CreatedBy", friendsQuery);
return query;
}
});
}
You're basically saying "find me rows where the pointer in 'CreatedBy' matches one of the rows returned by this query".
The method is documented under Relational Queries.