2017-08-17 59 views
1

这里是我的工作对象:与子阵列境界查询

public class NavigationMenuModule extends RealmObject implements Parcelable { 

    @PrimaryKey 
    public String sectionKey; 

    public RealmList<ItemModule> modules; 
    public RealmList<Article> spotlightSponsored; 
    public RealmList<Article> items; 
} 

孩子的Article对象:

public class Article extends RealmObject { 
     @PrimaryKey 
     public String contentId; 
     public String leadImageURL; 
     public String summary; 
     public String headline; 
    } 

我将如何构建这种境界电话:

  1. 获取NavigationMenuModule item by sectionKey
  2. 得到NavigationMenuModule,该文章的内容识别

以下作品的方法匹配内spotlightSponsored,但我觉得有可能是一个“整洁”的方式:

public static Article getArticle(String sectionKey, String articleId) { 
    Realm realm = Realm.getDefaultInstance(); 

    NavigationMenuModule navigationMenuModule = realm.where(NavigationMenuModule.class).equalTo("sectionKey", sectionKey).findFirst(); 
    if (navigationMenuModule != null && !navigationMenuModule.spotlightSponsored.isEmpty()) { 
     for (Article article : navigationMenuModule.spotlightSponsored) { 
      if (article.getContentId().equals(articleId)) { 
       Article ret = realm.copyFromRealm(article); 
       realm.close(); 
       return ret; 
      } 
     } 
    } 
    realm.close(); 
    return null; 
} 
+0

这个问题中缺少'Article'类的代码。 – EpicPandaForce

+0

@EpicPandaForce糟糕,现在就做。这是一个非常简单的子类 – Psest328

回答

1

理论上,这应与领域合作3.5.0

public class NavigationMenuModule extends RealmObject implements Parcelable { 
    @PrimaryKey 
    public String sectionKey; 

    public RealmList<ItemModule> modules; 
    public RealmList<Article> spotlightSponsored; 
    public RealmList<Article> items; 
} 

public class Article extends RealmObject { 
    @PrimaryKey 
    public String contentId; 
    public String leadImageURL; 
    public String summary; 
    public String headline; 

    @LinkingObjects("spotlightSponsored") 
    public final RealmResults<NavigationMenuModule> spotlightSponsoredOf = null; 

    @LinkingObjects("items") 
    public final RealmResults<NavigationMenuModule> itemsOf = null; 
} 

public static Article getArticle(Realm realm, String sectionKey, String articleId) {  
    return realm.where(Article.class) 
       .equalTo("contentId", articleId) 
       .equalTo("spotlightSponsoredOf.sectionKey", sectionKey) 
       .findFirst(); 
} 
+0

可以请你提供一些解释这个答案?对不起,我是新来的领域,并试图赶上它 – Psest328

+1

我添加了反向关系(反向链接)到'Article',然后使用Realm的Query API进行查询,我也期待Realm被提供给该方法,以便你不需要从领域复制它,这通常是误用/误解API的指示器(除非你想用GSON序列化或在事务外修改它,比如在表单中)。如果你能够显示出你有这个想法的答案,那么我就会低估它是一个不好的答案。 – EpicPandaForce

+0

感谢您的解释。我没有从任何地方得到这个片段,我正在通过它自己:) – Psest328