2017-02-15 2 views
0

Когда я установить мое приложение для впервые на моем телефоне, то приложение падает из-за ошибки Realm: This method is only available in managed mode который я действительно не понимаю, многоRealm Ошибка: Этот метод доступен только в управляемом режиме

Этом happends, когда я пытаюсь получить отсортированный список ListItem в классе Shoplist

public class Shoplist extends RealmObject implements Serializable { 

private RealmList<ListItem> itemList; //ListItem extends `RealmObject` 

@Ignore 
private Realm realm; 

@PrimaryKey 
private long id; 

public Shoplist() { 

    realm = Realm.getDefaultInstance(); 
} 

public RealmList<ListItem> getItemList() { 
    return itemList; 
} 

public List<ListItem> getItems(String listOrder) { 

    RealmResults<ListItem> realmResults; 

    switch (listOrder) { 
     case PrefActivity.ASCENDING: 
      realmResults = getItemList().where().findAll(); // this crashes! 
      break; 

     case PrefActivity.DESCENDING: 
      realmResults = getItemList().where().findAllSorted(ListItem.TIME_STAMP, Sort.DESCENDING); 
      break; 
    } 

    return realmResults; 
    } 
} 
объект

Shoplist создается, как это в классе под названием RealmService

public Shoplist createShoplist(String title) { 

    realm = Realm.getDefaultInstance(); 
    realm.beginTransaction(); 
    Shoplist shoplist = new Shoplist(new RealmList<ListItem>(), title); 
    realm.copyToRealm(shoplist); 
    realm.commitTransaction(); 

    return shoplist; 

} 

СТАТИСТИКА:

Realm Gradle Plugin: 2.3.1

Gradle Плагин: 2.2.3

Compile версия: 25

Android Studio Версия: 2.2.3

Тестовый телефон: Samsung Galaxy S7

+0

это [ответ] (http://stackoverflow.com/questions/37162444/creating-managed-realmlist-outside-realmobject) может помочь вам с вашим probelm –

+0

этот ответ может помочь вам в вашей проблеме http://stackoverflow.com/questions/37162444/creating-managed-realmlist-outside-realmobject –

+0

Вам действительно нужно закрыть экземпляр вашего царства. Кроме того, вы действительно не должны давать вашему классу модели экземпляр области. –

ответ

1

Вам нужна работа с managed object. Ваша ошибка возникает, когда Shoplist объект создан с помощью оператора new - объект не управляемого.

Вам нужно обернуть экземпляр Shoplist в Realm:

public Shoplist createShoplist(String title) { 

    realm = Realm.getDefaultInstance(); 
    realm.beginTransaction(); 

    Shoplist shoplist = realm.createObject(Shoplist.class) 
    shoplist.setTitle(title); 

    realm.copyToRealm(shoplist); 
    realm.commitTransaction(); 

    return shoplist; 
} 
+0

Я только что редактировал мой вопрос. Пожалуйста, взгляните на его нижнюю часть. Потому что я так делаю? – Muddz

+0

Ага в порядке! Все говорят, потому что его не управляемый объект, но никто не объяснил, как выглядит неуправляемый vs, как ваш ответ! – Muddz

+0

Но, используя этот способ, у него не будет 'Shoplist' содержать' @ primaryKey', поэтому я удалил его и использовал этот вызов 'realm.createObject (Shoplist.class, System.currentTimeMillis());' Но как могу ли я затем восстановить идентификатор созданного объекта «Shoplist»? где он хранится – Muddz

Смежные вопросы