Android Realm中的一对多关系。处理线程

时间:2016-08-29 19:10:34

标签: java android asynchronous realm

通过将一首歌分配给乐队,我有一对多的关系关系,乐队有很多歌曲。所以最后我分配了song.setBand(乐队)。这一切都有意义,因为乐队是从listView中挑选出来的。问题是在尝试使用band添加新歌时使用executeTransationAsync。如果没有选择乐队,它可以工作,但除此之外,我遇到了线程问题。在处理当前线程时,我不得不再次选择乐队。有没有更好的解决方案呢?

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 );
            });
}

1 个答案:

答案 0 :(得分:2)

就今天的2016年8月29日而言,这是使用异步事务保存具有一对多关系的对象的正确方法。感谢您对留下评论的人的帮助。