1
1つの曲を1つのバンドに割り当て、1つのバンドに多くの曲を持たせることで、1対多の関係になります。最終的に私はsong.setBand(バンド)を割り当てています。バンドがlistViewから選択されているので、これはすべて意味があります。問題は、バンドで新しいソングを追加しようとして、executeTransationAsyncを操作するときでした。バンドが選択されていなければ動作しましたが、それ以外の場合はスレッドの問題が発生していました。私は現在のスレッドと一緒に働いている間にバンドをもう一度選択しなければならなかった。これを行うためのよりよい解決策がありますか?Androidレルムの1対多の関係。スレッドを扱う
public void add(Song song){
int bandId = song.getBand().getId();
realm.executeTransactionAsync(thisRealm->{
Number nextID = thisRealm.where(Song.class).max("id");
if(nextID != null){
song.setId(nextID.intValue() + 1);
}else{
song.setId(0);
}
Band band = thisRealm.where(Band.class).equalTo("id", bandId).findFirst();
if(band != null){
song.setBand(band);
}else{
song.setBand(null);
}
thisRealm.copyToRealm(song);
},
()->{
publishSubject.onNext(song);
},
error->{
publishSubject.onError(error);
});
}
もう一方のスレッドのIDに基づいて再クエリするのは、かなり標準的です。 – EpicPandaForce
今のところ、EpicPandaForceによれば、これを再クエリーする必要があります。しかし、私たちはもっと良い解決策に取り組んでいます。https://github.com/realm/realm-java/issues/2187を参照してください。 – beeender