2016-01-15 10 views
1

Я пытаюсь получить значение, которое я сохранил в Realm, но я не знаю, как это сделать .. значение всегда равно null .. но когда я отлаживаю код, значение появляется, как вы можете видеть на картинке ниже:Android - Realm Как получить значение

Примечание: BookMarkActive & idBookMark имеет правильное значение в выбранном линии, но ниже ничего не появляется.

enter image description here

Как я могу получить значение?

гляньте тот же код на картинке:

public String UpdateBookMarks(String id){ 
    Realm realm = Realm.getInstance(_context); 
    RealmQuery<Bookmark> query = realm.where(Bookmark.class); 
    query.equalTo("IdBookMark", id); 
    Bookmark stationDetails = query.findFirst(); 
    if(stationDetails.getBookMarkActive() == "true"){ 
     stationDetails.setIdBookMark("false"); 
     return "Station has been removed from your bookmark list."; 
    }else if (stationDetails.getBookMarkActive() == "false"){ 
     stationDetails.setIdBookMark("true"); 
     return "Station has been added to your bookmark list."; 
    } 
    return "Error"; 
} 

BookMark класс:

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

    public String getIdBookMark() { 
     return IdBookMark; 
    } 

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

    public String getBookMarkActive() { 
     return BookMarkActive; 
    } 

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

Примечание: Realm версия «io.realm: область-андроид: 0.87.2 '

+0

Так он выходит из строя, когда вы звоните 'stationDetails.getBookMarkActive()' ', потому что stationDetails' является нулевым? – cylon

+0

Yep ... но значение есть, так как вы можете выбрать выбранную строку на изображении, но я получаю нуль .. вы знаете, что я имею в виду? @ – gon250

+0

Кстати, 'stationDetails.getBookMarkActive()' возвращает строку? Если это так, вы должны сравнить с '.equals (« true »)', иначе сравните его с «true», а не с «true». То же самое относится к ветке else. – cylon

ответ

5

Вы не можете доверять виду отладки в Android Studio для RealmObjects, управляемого Realm. Это просто объекты-прокси для истинных базовых данных, которые хранятся в собственной памяти. Это означает, что в этих полях будет отображаться только значение по умолчанию для поля: 0 для int, null для String и ссылки.

Вы можете прочитать об этом здесь: http://realm.io/docs/java/latest/#debugging

+0

Просто примечание: вы можете получить фактические значения переменных, используя окно «Часы» и вызывая либо переменную на вашем объекте напрямую, либо используя обязательные геттеры для переменных при отладке. – Darwind