android realmの例外処理。 Cannot modify managed objects outside of a write transaction
こんにちは。realmの例外についてです。
Wordというモデルクラスのインスタンスにint 型のrandomIdというランダムな値をセットしたいのですが、
java.lang.IllegalStateException: Cannot modify managed objects outside of a write transaction.
が起きてしまいます。なぜでしょうか。
試したこととしてはsetRandomId()にランダムではなく任意の数値を入れてみたり、他activityにて問題なく作動している値をsetするメソッド(setMeaningというメソッドを使いましたが内容は省略します。)を使うなどしましたが、その場合も同様のエラー文が出てきます。
スタックオーバーフロー上ではandroidでのこの例外処理に関する情報がなく質問致しました。
private void setRandom() {
mEditor.putBoolean("random", true);
mEditor.apply();
mRealm = Realm.getDefaultInstance();
RealmResults<Word> realmResults = mRealm.where(Word.class).findAll();
int realmSize = realmResults.size();
mRealm.close();
boolean num[] = new boolean[realmSize]; //重複判定用
Random rand = new Random(); //ランダムな数値
// すべての重複判定用配列をfalseにしておく
for(int i=0; i<realmSize; i++){
num[i] = false;
}
for (int i = 0; i < realmSize; ) {
int p = rand.nextInt(realmSize);
if(!num[p]){
Word word = mRealm.where(Word.class).equalTo("id", i).findFirst();
word.setRandomId(p); //ここでクラッシュがおきる
num[p] =true;
i++;
mRealm.beginTransaction();
mRealm.copyToRealmOrUpdate(word);
mRealm.commitTransaction();
mRealm.close();
}
}
}