2015-03-30 38 views
2

我有一个列表articles
这些文章插入使用realm.copyToRealmOrUpdate();,它工作得很好。保存领域的关系不会持续它们

现在每篇文章都有一个authorId,它不应该被持久化。相反,我想找到存储的author RealmObject并设置文章的关系。

Author author = realm.where(Author.class).equalTo("id", article.getSerializedAuthor()).findFirst(); 
article.setAuthor(author); 

不知何故,这似乎并没有被领域持续。

这同样适用于image RealmObject,只是我在保存前迭代。

这是完整的片段。

realm.beginTransaction(); 
realm.copyToRealmOrUpdate(articles.data); 

for(Article article : articles.data) { 
    Author author = realm.where(Author.class).equalTo("id", article.getSerializedAuthor()).findFirst(); 
    article.setAuthor(author); 

    for (Image image : article.getSerializedImages().data) { 
     if (article.getImages() == null) { 
      article.setImages(new RealmList<Image>()); 
     } 
     article.getImages().add(image); 
    } 
} 
realm.commitTransaction(); 

如果您需要更多信息,请让我知道。
谢谢。

+0

我只是试图把每一个语句中'realm.beginTransaction();'''realm.commitTransaction();'。但这也没有帮助... – 2015-03-31 17:30:42

回答

1

Christian来自Realm这里。您继续操纵刚刚复制到Realm的独立对象,这将不起作用,因为它们仍然是独立对象而不是“正确的”Realm对象。你可以在这里阅读更多:http://realm.io/docs/java/0.80.0/#creating-objects并在JavaDoc http://realm.io/docs/java/0.80.0/api/io/realm/Realm.html#copyToRealm-E-

所以,如果你改变你的代码类似下面,它应该工作:

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     List<Article> realmArticles = realm.copyToRealmOrUpdate(articles.data); 

     for(Article article : realmArticles) { 
      Author author = realm.where(Author.class).equalTo("id", article.getSerializedAuthor()).findFirst(); 
      article.setAuthor(author); 

      for (Image image : article.getSerializedImages().data) { 
       article.getImages().add(image); 
      } 
     } 
    } 
}); 
+0

感谢您的回复!你是对的。我认为这是通过引用保存的。似乎不是那样。后来我会在github上发布一个链接到我的这个问题的更新版本。 – 2015-03-31 20:08:03

+0

所以这里是我的固定版本:https://github.com/MetalMatze/Krautreporter/blob/feaa251b29cc59702a9e4af38c2039b6ce767f78/app/src/main/java/de/metalmatze/krautreporter/api/Api.java#L78我需要手动迭代因为getSerializedImages()具有@Ignore注释。 – 2015-03-31 22:37:06

+0

是的,API的这个特定部分并不好,但不幸的是受到Java语言本身的局限性支配。 – 2015-04-01 05:19:33

0

您是否在使用GSON?如果是这样,你是否按照http://realm.io/docs/java/0.80.0/#gson中列出的示例进行操作?

+0

是的,我做到了。 https://github.com/MetalMatze/Krautreporter/blob/8d4e0e0d0d2056cce41f5c461ea7216bf47cba60/app/src/main/java/de/metalmatze/krautreporter/api/Api.java#L30问题不是从服务器检索数据。我已经检查过它,全都在那里。但坚持与领域不起作用。 – 2015-03-31 16:38:22