Baza Realm zwraca obiekt z wartościami Null

0

Hej, mam problem z odczytaniem obiektu z bazy Realm. Pobieram dane z serwera REST za pomocą retrofit'a. Parsuje to wszystko gson'em i dodaję do bazy Realm. Do tego momentu jest wszystko ok. Lecz kiedy chcę pobrać dane już z bazy aby np. wyświetlić je na ekran to niestety mam problem. Każdy obiekt jaki pobiorę ma wszystkie pola z wartością null. Co ciekawe tyczy się to tylko jednej klasy gdzie mam kolekcje z innej klasy plus pola które też reprezentują inne klasy. Co ciekawe w polu columnInfo są przetrzymywane interesujące mnie dane w postaci Stringa. Zakładam że jest jakiś problem z parsowaniem getterów przez Realm'a. Informacja jakie znalazłem to jest to że kolekcje obiektów z Realm'a powinny być zwracane do RealmResult lecz zastosowanie tego nic nie dało. Poniżej umieszczam kod związany z daną klasą jak i zdjęcie jak wygląda pobrany obiekt oraz link do github'a jakby ktoś chciał zobaczyć całość kodu.
Klasa order będąca modelem.

public class Order extends RealmObject {
@PrimaryKey
@SerializedName("Id")
private int id;
@SerializedName("Contractor")
private Contractor contractor;
@SerializedName("ItemAmounts")
private RealmList<ItemAmount> itemsAmounts = new RealmList<>();
@SerializedName("ModificationDate")
private Date modificationDate;
@SerializedName("ExportDate")
private Date exportDate;
@SerializedName("Export")
private boolean exportStatus;
@SerializedName("User")
private User user;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public Contractor getContractor() {
    return contractor;
}

public void setContractor(Contractor contractor) {
    this.contractor = contractor;
}

public RealmList<ItemAmount> getItemsAmounts() {
    return itemsAmounts;
}

public void addItemAmount (ItemAmount itemAmount){
    itemsAmounts.add(itemAmount);
}

public void setItemsAmounts(RealmList<ItemAmount> itemsAmounts) {
    this.itemsAmounts = itemsAmounts;
}

public Date getModificationDate() {
    return modificationDate;
}

public void setModificationDate(Date modificationDate) {
    this.modificationDate = modificationDate;
}

public Date getExportDate() {
    return exportDate;
}

public void setExportDate(Date exportDate) {
    this.exportDate = exportDate;
}

public boolean isExportStatus() {
    return exportStatus;
}

public void setExportStatus(boolean exportStatus) {
    this.exportStatus = exportStatus;
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

Klasa OrderDAO która jest odpowiedzialna za obsługę Realm'a

public class OrderDAO {

private Realm realm = Realm.getDefaultInstance();
private Order orderRealm;


public Order getOrderById(int id) {
    orderRealm = realm.where(Order.class).equalTo("id", id).findFirst();

    return orderRealm;
}

public List<Order> getOrdersbyContractor(Contractor contractor) {
   List<Order> ordersList = new ArrayList<>();

    RealmResults<Order> ordersRealmResults = realm.where(Order.class).findAll();

    for (Order order : ordersRealmResults) {
        if (order.getContractor().getNip().equals(contractor.getNip())) {
            ordersList.add(order);
        }
    }
    return ordersList;
}

public List<Order> getAllOrders() {
    List<Order> ordersList = new ArrayList<>();
    RealmResults<Order> orderRealmResults = realm.where(Order.class).findAll();
    for(Order order : orderRealmResults){
    ordersList.add(order);
    }

    return ordersList;
}

public void insertNewOrder(Order order) {

    realm.beginTransaction();

    order.setId(generateId());
    orderRealm = realm.createObject(Order.class, order.getId());
    orderRealm.setContractor(order.getContractor());
    orderRealm.setUser(order.getUser());
    realm.commitTransaction();
}

//Dla testów do usunięcia
public void insertOrUpdate(Order order) {
    Order orderToCompare = realm.where(Order.class)
            .equalTo("id", order.getId()).findFirst();


    realm.beginTransaction();
   if (orderToCompare == null) {
        realm.copyToRealmOrUpdate(order);
    } else if (!orderToCompare.equals(order)) {
        realm.insertOrUpdate(order);
    }

       realm.commitTransaction();


}

private int generateId() {
    if (realm.where(Order.class).max("id") == null)
        return 1;
    else
        return realm.where(Order.class).max("id").intValue() + 1;
}

Metoda w której pobieram dane z REST api oraz dodaje je do Realm'a:

   Call<OrderResponse> orderResponseCall = apiService.getOrdersList();
    orderResponseCall.enqueue(new Callback<OrderResponse>() {
        @Override
        public void onResponse(Call<OrderResponse> call, Response<OrderResponse> response) {
            orderList = response.body().getOrdersList();
            orderDAO = new OrderDAO();

            for (Order order : orderList) {
                try {
                    orderDAO.insertNewOrder(order);


                } catch (Exception e) {
                    Log.d("REST", "Error");
                    e.printStackTrace();
                }
            }
        }

        @Override
        public void onFailure(Call<OrderResponse> call, Throwable t) {
            Log.e(TAG, t.toString());
        }
    });
}

Funkcja którą pobieram dane z Realm'a:

   private void prepareOrderData() {
    OrderDAO orderDAO = new OrderDAO();

    for (Order order : orderDAO.getAllOrders()) {
        ordersList.add(order);
    }
    orderAdapter.notifyDataSetChanged();
}

Link do repo: https://github.com/666Angelus666/MobileDealer
Oraz zdjęcie obiektu jaki pobieram:
screenshot-20170917231857.png

0

No cóż nie przypuszczałem ale wychodzi na to że sam sobie odpowiem. Okazało się że Realm nie lubi się z debugowaniem i pokazuje null przypisany do wartości. Natomiast w rzeczywistości zmienna posiada wartość i można to sprawdzić zwykłym Log.d bądż Toast'em. Dla ciekawskich wrzucam link do dokumentacjo opisujący dany problem https://realm.io/docs/java/latest/#android-studio-debugging-android-studio-debugging

1 użytkowników online, w tym zalogowanych: 0, gości: 1