2017-12-05 7 views
0

他のレルムオブジェクトに基づいてレルムオブジェクト(VolleyballPlayer)を作成しました。 女性オブジェクトは、すべてのバレーボールオブジェクトを含むが、男性オブジェクトは、いくつかのバレーボールオブジェクトを持っています。新しいリレーショナルrealmResultsを作成する方法は?

私は性別VolleyballPlayerオブジェクトグループ女性男性オブジェクトを作成します。しかし、私はRealmResultsに従ってそれを行う方法を見つけることができませんでした。

マイレルムオブジェクト:

public class Volleyball extends RealmObject { 
    private int round; 
    // ... Generated getters and setters ... 
} 

public class Gender extends RealmObject { 
    private String gender; 
    // ... Generated getters and setters ... 
} 

//...All females play volleyball. 
public class Female extends RealmObject { 
    private Volleyball volleyball; 
    private int clasp; 
    // ... Generated getters and setters ... 
} 

public class Male extends RealmObject { 
    private Volleyball volleyball; 
    private int belt; 
    // ... Generated getters and setters ... 
} 

新しいオブジェクト:

public class VolleyballPlayer extends RealmObject { 
    private Volleyball volleyball; 
    private Gender gender; 

    // ... Generated getters and setters ... 
} 

私はallFemaleとallMale realmResultsを持っているが、私はallPlayer realmResultsを取っていません。

RealmResults<Female> allFemales = mRealm.where(Female.class).findAll(); 
RealmResults<Male> allMales = mRealm.where(Male.class).findAll(); 

すべての女子学生は、バレーボールをし、どのように私はバレーボールを(女性の)すべてのプレイヤーを通じてから男子選手を抽出することができますか?

public void setAllVolleyballPlayers(Realm mRealm) { 

     Realm mRealm = getRealm(); 

     mRealm.beginTransaction(); 

     addAllMalePlayers(mRealm); 
     addAllFemalePlayers(mRealm); 

     mRealm.commitTransaction(); 
    } 

    private void addAllMalePlayers(Realm mRealm) { 

     RealmResults<Male> allMalePlayers = new MalePlayersQueries().getAllMales(mRealm); 

     mRealm.beginTransaction(); 

     if (allMalePlayers != null && allMalePlayers.size() > 0) { 

      VolleyballPlayer volleyballPlayer = mRealm.createObject(VolleyballPlayer.class); 

      Gender gender = mRealm.createObject(Gender.class); 
      gender.setGender(getString(R.string.male)); 

      volleyballPlayer.setGender(gender); 

      for (Male male : allMales) { 

      VolleyballPlayer volleyballPlayer = 
      mRealm.createObject(VolleyballPlayer.class); 
      volleyballPlayer.setVolleyball(male.getVolleyball()); 

      } 
     } 
    } 

    private void addAllFemalePlayers(Realm mRealm) { 

      RealmResults<Female> allFemales = new FemaleQueries().getAllPlayers(mRealm); 

      VolleyballPlayer volleyballPlayer = mRealm.createObject(VolleyballPlayer.class); 

      Gender gender = mRealm.createObject(Gender.class); 
      gender.setGender(getString(R.string.female)); 

      volleyballPlayer.setGender(gender); 

      ////// All female students play volleyball and how can I extract male players from all the players(in females) who play this volleyball and get females 
} 

そして、私はテーブルの最後に表示する: は、私は、コードの下に書く分野における方法はあります

**Volleyball Players** 

    **Female** 

    Emma 
    Olivia 
    Sophia 

    **Male** 

    John 
    Jame 
+0

を行うことができます。なぜそれが存在するのですか? 「男性」/「女性」と「学生」の違いは何ですか?すべての男性/女性は生徒ですか? – EpicPandaForce

+0

はい、すべての男性と女性は学生です。 – propoLis

+0

'sequenceNumber'と' setNumber'の間に違いはありますか?それとも、2つの異なるクラスを除いて同じものですか?女性/男性にバレーボールを設定するのはどういう意味ですか?彼らはバレーボールの1つの特定のゲームをしたことを意味しますか?もっと多くのバレーボールの試合はどうですか? – EpicPandaForce

答えて

2

個人的に私は、「単一の力を活用したいですこれを「識別器フィールドを使用したテーブル継承」と呼びます。

public class Volleyball extends RealmObject { 
    private int round; 

    @LinkingObjects("volleyball") 
    private final RealmResults<VolleyBallPlayer> playedBy = null; 
    // ... Generated getters and setters ... 
} 

public class VolleyBallPlayer extends RealmObject { 
    private Volleyball volleyball; 
    @Index 
    private String gender; 
    private int femaleClasp; // 0, or with Integer `null` if male 
    private int maleBelt; // 0, or with Integer `null` if female 
    // ... Generated getters and setters ... 
} 

今、あなたはバレーボールが何のフィールドを持っていない

RealmResults<VolleyBallPlayer> femalePlayers = realm.where(VolleyBallPlayer.class) 
    .equalTo("gender", Gender.FEMALE.name()).findAll(); 
RealmResults<VolleyBallPlayer> malePlayers = realm.where(VolleyBallPlayer.class) 
    .equalTo("gender", Gender.MALE.name()).findAll(); 

とにも

RealmResults<Volleyball> maleVolleyballs = realm.where(Volleyball.class) 
    .equalTo("playedBy.gender", Gender.MALE.name()).findAll(); 
+0

非常に感謝しますが、実際には私の質問はどのようにVolleyballPlayer realmresultsを作成するかです。 – propoLis

+0

あなたは私の編集された答えを見ることができますし、助けてください – propoLis

+0

私が言ったように、私は男性と女性を一緒にマージします。それはあなたの質問を簡単にするでしょう。 – EpicPandaForce

関連する問題