Search code examples
androidsortingrealmrlmlinkingobjects

How to sort linking objects of realm?


I have a realmObject that includes linkingObject.

@RealmClass
public class VolleyballPlayer extends RealmObject {

    @PrimaryKey
    private String id;

    @LinkingObjects("volleyballPlayer")
    private final RealmResults<Player> players = null;
}

@RealmClass
public class Player extends RealmObject {

    private Set set;
    private VolleyballPlayer volleyballPlayer;
    private BasketballPlayer basketballPlayer;
    private String playerName = "";
}

I want to sort linking objects which inside realmObject. But the first query is running but other query is crashing because of that sorted linking objects.

     RealmResults<VolleyballPlayer> volleyballPlayers = 
   mRealm.where(VolleyballPlayer.class)
.findAll();

     RealmResults<VolleyballPlayer> volleyballPlayers = 
  mRealm.where(VolleyballPlayer.class)
.sort("link.playerName") 
.findAll();

My crash report:

  java.lang.IllegalArgumentException: 
Invalid query: field 'volleyballPlayer' in class 'VolleyballPlayer' is of invalid type 'LINKING_OBJECTS'.
                                                                              at io.realm.internal.fields.FieldDescriptor.verifyColumnType(FieldDescriptor.java:277)
                                                                              at io.realm.internal.fields.FieldDescriptor.verifyInternalColumnType(FieldDescriptor.java:230)
                                                                              at io.realm.internal.fields.CachedFieldDescriptor.compileFieldDescription(CachedFieldDescriptor.java:83)
                                                                              at io.realm.internal.fields.FieldDescriptor.compileIfNecessary(FieldDescriptor.java:285)
                                                                              at io.realm.internal.fields.FieldDescriptor.getFinalColumnType(FieldDescriptor.java:213)
                                                                              at io.realm.internal.SortDescriptor.checkFieldType(SortDescriptor.java:110)
                                                                              at io.realm.internal.SortDescriptor.getInstance(SortDescriptor.java:95)
                                                                              at io.realm.internal.SortDescriptor.getInstanceForSort(SortDescriptor.java:65)
                                                                              at io.realm.RealmQuery.sort(RealmQuery.java:1953)
                                                                              at io.realm.RealmQuery.sort(RealmQuery.java:1914)
                                                                              at io.realm.RealmQuery.sort(RealmQuery.java:1898)
                                                                              at com.android.android.dao.crud.ShareCRUD$1.run(ShareCRUD.java:40)
                                                                              at com.android.android.dao.RealmController$1.run(RealmController.java:60)
                                                                              at java.lang.Thread.run(Thread.java:762)

Solution

  • Realm isn't support sorting in linking objects. So I add name field to VolleyballPlayer.

    @RealmClass
    public class VolleyballPlayer extends RealmObject {
    
        @PrimaryKey
        private String id;
        private String name = "";
    
        @LinkingObjects("volleyballPlayer")
        private final RealmResults<Player> players = null;
    }
    

    Sorting is:

    RealmResults<VolleyballPlayer> volleyballPlayers = 
      mRealm.where(VolleyballPlayer.class)
      .sort("name") 
      .findAll();
    

    Thank you