user1007522 user1007522 - 4 months ago 53
Android Question

Realm query with List

I'm using realm to store my data on Android. Awesome framework! Now the only problem I'm now having is:

I got a array list strings with id's of Countries in my database.

Now I retrieve my Drinks that contains a relationship to countries.

Is there a way that I could to do a query like this:

String [] ids;

realm.where(Drinks.class).equalsTo("country.id", ids);


Something like that?

Or do I really need to do a query to get me all drinks and then filter the list manually?

EDIT:

My classes:

public class Drinks extends RealmObject {
@PrimaryKey
private String id;
private String name;
private Country country;
}

public class Country extends RealmObject {
@PrimaryKey
private String id;
private String name;
}

Answer

What you want to do is possible with link queries in theory (searching for "country.id"), however link queries are slow. Also you'd need to concatenate a bunch of or() predicates together, and I would not risk that with a link query.

I would recommend using the following

public class Drinks extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
    private Country country;
    @Index
    private String countryId;
}

public class Country extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
}

And when you set the Country in your class, you also set the countryId as country.getId().

Once you do that, you can construct such:

RealmQuery<Drinks> drinkQuery = realm.where(Drinks.class);
int i = 0;
for(String id : ids) {
    if(i != 0) {
        drinkQuery = drinkQuery.or();
    }
    drinkQuery = drinkQuery.equalTo("countryId", id);
    i++;
}
return drinkQuery.findAll();
Comments