2016-11-29 5 views
0

私はコースを更新するには、このクラスの呼び出しを同期した後どのように関係で領域内の作品を削除しますか?

class Student extends RealmObject { 
    public String code; 
    public String name; 
    public String email; 
    public Course course; 
} 

class Course extends RealmObject { 
    public String code; 
    public String name; 
} 

class Sync { 
    // ... 
    // To sync data I am using retrofit, look the method to update course 
    public void onResponse(Call<...> call, Response<...> response) { 
     if (response.isSuccessful()) { 
      realm.executeTransactionAsync(new Realm.Transaction() { 
       @Override 
       public void execute(Realm realm) { 
        realm.delete(Course.class); 
        realm.copyToRealm(response.body()); 
       } 
      }); 
     } 
    } 
} 

を持っている、すべての学生オブジェクトがnullに設定し、そのコースがあり、これは後のレルムが削除呼ば期待される動作ですか? テーブルに再び値が設定された後でも、生徒のコースはまだnullです。

今日は、コードにこの変更を行った:

class Course extends RealmObject { 
    @PrimaryKey 
    public String code; 
    public String name; 
} 

class Sync { 
    // ... 
    // To sync data I am using retrofit, look the method to update course 
    public void onResponse(Call<...> call, Response<...> response) { 
     if (response.isSuccessful()) { 
      realm.executeTransactionAsync(new Realm.Transaction() { 
       @Override 
       public void execute(Realm realm) { 
        realm.copyToRealmOrUpdate(response.body()); 
       } 
      }); 
     } 
    } 
} 

私はコースを削除避けるために、これは遅すぎました。

私は参照コースを復習して、学生に再度設定することができますか?

ありがとうございます。

答えて

1

これは、あなたが指しているオブジェクトを削除してオブジェクトリンクを無効にするため、予期される動作です。

復元するには、リンクを再度設定する必要があります。


もう1つ解決策は、まだ必要なコースを削除しないことです。 code@PrimaryKeyと注釈を付けると、既に登録されているコースが更新されます。問題が解消されるのは、もはや応答ではなく、there are solutions ready-made for thatです。

public class Robject extends RealmObject { 
    @PrimaryKey 
    private String code; 

    @Index 
    private String name; 

    //... 

    @Index 
    private boolean isBeingSaved; 

    //getters, setters 
} 

そして

// background thread 
Realm realm = null; 
try { 
    realm = Realm.getDefaultInstance(); 
    realm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm realm) { 
      Robject robject = new Robject(); 
      for(Some some : somethings) { 
       robject.set(some....); 
       realm.insertOrUpdate(robject); 
      } 
      realm.where(Robject.class) 
       .equalTo(Robject.IS_BEING_SAVED, false) // compile 'dk.ilios:realmfieldnameshelper:1.1.0' 
       .findAll() 
       .deleteAllFromRealm(); // delete all non-saved data 
      for(Robject robject : realm.where(Robject.class).findAll()) { // realm 0.89.0+ 
       robject.setIsBeingSaved(false); // reset all save state 
      } 
     } 
    }); 
} finally { 
    if(realm != null) { 
     realm.close(); 
    } 
} 
+0

ありがとうございます。私はレルムが削除コースを終えても何らかのIDを学生に保持していると思った。また、参照がテーブルに再び移入された後で回復することができました。注釈@A PrimaryKey'を使用するためのヒントに従っていますが、今では領域からオブジェクトを削除しないようにしています。私は解決のようにこれを閉じます。 – diegofesanto

関連する問題