2017-02-15 5 views
0

私は自分の携帯電話に最初に私のアプリをインストールし、理由レルム・エラーのアプリのクラッシュ:This method is only available in managed mode私は本当にレルムエラー:このメソッドは、管理対象モードでのみ使用可能です

これの多くを理解していません私は、ショップリスト、オブジェクトが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; 

} 
というクラスで、次のように作成され 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; 
    } 
} 

クラスでListItemのソートされたリストを取得しようとするとhappendsの

STATS:

レルムのGradleプラグイン:2.3.1

のGradleプラグイン:2.2.3

コンパイルバージョン:25

のAndroid Studioバージョン:2.2.3

テスト用電話:Samsung Galaxy S7

+0

この[解答](http://stackoverflow.com/questions/37162444/creating-managed-realmlist-outside-realmobject)はあなたを助けるかもしれませんあなたの問題と –

+0

この回答はあなたの問題に役立つかもしれません http://stackoverflow.com/questions/37162444/creating-managed-realmlist-outside-realmobject –

+0

本当にあなたの領域インスタンスを閉じる必要があります。また、モデルクラスにrealmインスタンスを与えてはいけません。 –

答えて

1

あなたは仕事が必要ですmanaged objectとなります。 Shoplistオブジェクトがnew演算子で作成された場合、エラーが発生します。管理対象オブジェクトです。

レルムにShoplistのインスタンスをラップする必要があります。

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

ああ、大丈夫です!管理されたオブジェクトではなく、管理されていない対管理された管理の仕方を誰も説明していないため、皆は答えてくれました。 – Muddz

+0

しかし、このようにして 'Shoplist'に' @ primaryKey'が含まれていないので、それを削除して 'realm.createObject(Shoplist.class、System.currentTimeMillis());という呼出しを使用します; それから私はShoplistの作成されたオブジェクトのidを取得することはできますか?あなたのケースでは '@ PrimaryKey'でアノテーションされた' private long id'フィールドに格納されているプラ​​イマリキーが – Muddz

関連する問題