如何将java列表存储在领域android数据库中

Posted

技术标签:

【中文标题】如何将java列表存储在领域android数据库中【英文标题】:how to store java list in realm android database 【发布时间】:2017-05-02 12:41:20 【问题描述】:

我们如何将 java 列表存储在领域 android 数据库中。我尝试使用模型中存在的 setter 方法来存储它,但它不起作用,并且我在异常消息中收到“'value' 的每个元素都必须是有效的托管对象”。

public void storeNewsList(String categoryId, List<News> newsList)  
    Realm realm = Realm.getDefaultInstance(); 
    realm.beginTransaction(); 
    NewsList newsListObj = realm.createObject(NewsList.class); 
    newsListObj.setNewsList(new RealmList<>(newsList.toArray(new News[newsList.size()]))); 
    newsListObj.setCategoryId(categoryId); 
    realm.commitTransaction(); 
    realm.close(); 
 

【问题讨论】:

分享你的代码你做了什么? public void storeNewsList(String categoryId, List newsList) Realm realm = Realm.getDefaultInstance();领域.beginTransaction();新闻列表 newsListObj = realm.createObject(NewsList.class); newsListObj.setNewsList(newsListObj.setNewsList(new RealmList(newsList.toArray(new News[newsList.size()])));); newsListObj.setCategoryId(categoryId);领域.commitTransaction();领域.close(); 【参考方案1】:

将代码替换为

public void storeNewsList(String categoryId, List<News> newsList)  
    try(Realm realm = Realm.getDefaultInstance())  
        realm.executeTransaction(new Realm.Transaction() 
             @Override
             public void execute(Realm realm) 
                 NewsList newsListObj = new NewsList(); // <-- create unmanaged
                 RealmList<News> _newsList = new RealmList<>();
                 _newsList.addAll(newsList);
                 newsListObj.setNewsList(_newsList); 
                 newsListObj.setCategoryId(categoryId);
                 realm.insert(newsListObj); // <-- insert unmanaged to Realm
             
        ); 
    
 

【讨论】:

newsListObj.setNewsList(new RealmList(newsList));出现错误无法解析构造函数。 啊,那么addAll()就是 它只对我有用,而不是 RealmList _newsList = new RealmList();我需要添加 RealmList _newsList = new RealmList(); 当然,尝试使用资源自动关闭 Realm 实例 @Aks4125 天哪,你每行泄漏 2 个领域实例 O_o【参考方案2】:

如果你使用@PrimaryKey,那么insertOrUpdate 就可以了

try(Realm realm = Realm.getDefaultInstance()) 
                        realm.executeTransaction(new Realm.Transaction() 
                            @Override
                            public void execute(Realm realm) 
                                 RealmList<News> _newsList = new RealmList<>();
                                _newsList.addAll(myCustomArrayList);
                                realm.insertOrUpdate(_newsList); // <-- insert unmanaged to Realm

                            
                        );
                    

【讨论】:

以上是关于如何将java列表存储在领域android数据库中的主要内容,如果未能解决你的问题,请参考以下文章

Android,删除列表和sqlite java中的项目

如何在 Android JAVA 的列表视图中显示部分但不是全部 JSON 数据

您如何在 Java 中使用 Google App Engine 数据存储中的列表属性?

如何将本地存储中的 JSON 对象添加到 Android Studio 上的片段列表

如何事先获取将存储在 Android/Java 缓存中的未来 Glide 图像大小?

如何在android中将arraylist或vector插入SQLite数据库?