Android - Realm, как запросить логическое значение

Я начал использовать «Realm» и не могу понять, как получить все результаты со значением равным истине.

Взгляните на мой код ниже:

Java-класс

@RealmClass
public class Bookmark extends RealmObject {
    private java.lang.String IdBookMark;
    private boolean BookMarkActive;

    public String getIdBookMark() {
        return IdBookMark;
    }

    public void setIdBookMark(String idBookMark) {
        IdBookMark = idBookMark;
    }

    public boolean isBookMarkActive() {
        return BookMarkActive;
    }

    public void setBookMarkActive(boolean bookMarkActive) {
        BookMarkActive = bookMarkActive;
    }
}

Функция:

private boolean AnyBookMark (){
    Realm realm = Realm.getInstance(getContext());
    RealmQuery<Bookmark> query = realm.where(Bookmark.class);
    query.contains("BookMarkActive","true");
    RealmResults<Bookmark> userBookmarks = query.findAll();
    return userBookmarks.isEmpty();
}

Ошибка:

НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: gon250.dublinbikes, PID: 2624 java.lang.IllegalArgumentException: поле «BookMarkActive»: несоответствие типов. Было STRING, ожидалось BOOLEAN. в io.realm.RealmQuery.getColumnIndices(RealmQuery.java:146) в io.realm.RealmQuery.contains(RealmQuery.java:816) в io.realm.RealmQuery.contains(RealmQuery.java:802) в tabs.Tab2. AnyBookMark (Tab2.java: 55) в tabs.Tab2.onCreateView (Tab2.java: 33)

Версия:

скомпилировать «io.realm: realm-android: 0.78.0»

Каков правильный способ получить все результаты с BookMarkActive равным true.


person gon250    schedule 14.01.2016    source источник


Ответы (2)


Вместо query.contains("BookMarkActive","true"); можно сделать query.equalTo("BookMarkActive", true);.

Кстати, 0.78.0 действительно старая версия. Я рекомендую вам обновиться в ближайшее время ;-)

person geisshirt    schedule 14.01.2016
comment
Я не могу этого сделать .. Я получаю сообщение об ошибке, потому что bool. Я изменил свой класс объекта, поэтому BookMarkActive теперь является строкой и работает. Может потому что версия не та? в случае, если я обновлю Realm, должен ли я изменить свой код? - person gon250; 14.01.2016
comment
Обновление, например, до версии 0.87 потребует внесения изменений в ваш код, поскольку мы изменили API и будем делать это до версии 1.0. - person geisshirt; 14.01.2016

Функция должна быть примерно такой:

private boolean anyBookMark() {
    Realm realm = Realm.getInstance(getContext());
    RealmQuery<Bookmark> query = realm.where(Bookmark.class);
    query.equalTo("BookMarkActive", "true");
    RealmResults<Bookmark> userBookmarks = query.findAll();
    return userBookmarks.isEmpty();
}

Столбец BookMarkActive должен быть типа String. Если это какой-то другой тип, то должно быть передано соответствующее значение, а не "true"

person Simpalm    schedule 15.01.2016