使用领域更新嵌套列表
问题描述:
我在我的Android应用程序中使用领域和改进。我试图更新从服务器获得的JSON。 JSON包含列表中的列表。而领域不会将新数据添加到领域数据库。使用领域更新嵌套列表
我第一次使用realm.copyToRealmOrUpdate
正确的数据被添加。但如果我第二次尝试相同的JSON包含新的triggeringZones
这些区域不会被添加。我需要重新安装要添加的区域的应用程序。
任何人都有关于如何使用copyToRealmOrUpdate
列表中的列表或有任何其他选项的线索?
实施例类:
public class Zones {
public List<Zone>
}
public class Deals {
public List<AffectingZones>
}
public class AffectingZones {
}
例JSON
{
"transactionId": "string",
"status": "SUCCESS",
"statusDescription": "string",
"triggeringZones": [
{
"id": 0,
"name": "string",
"description": "string",
"longitude": 0,
"latitude": 0,
"radius": 0,
"deals": [
{
"id": 0,
"description": "string",
"principle": "ALL",
"affectingZones": [
{
"id": 0,
"name": "string",
"description": "string",
"longitude": 0,
"latitude": 0,
"radius": 0
}
],
"triggeringZone": {
"id": 0,
"name": "string",
"description": "string",
"longitude": 0,
"latitude": 0,
"radius": 0
}
}
]
}
]
}
答
copyToRealmOrUpdate
公共的java.util.List copyToRealmOrUpdate(java.lang.Iterable对象)
更新由其PrimaryKey
标识的现有RealmObjects
的列表,或者在未找到现有对象的情况下创建新副本。
请确保PrimaryKey
coulmn在copyToRealmOrUpdate
的主表中工作。
由于境界V1.1.0他们想出了一些优化技术,现在提供了4种新的方法,或者你也可以利用它
- 无效Realm.insert(RealmModel OBJ)
- 无效Realm.insert(收藏)
- 无效Realm.insertOrUpdate(RealmModel OBJ)
- 无效Realm.insertOrUpdate(收藏)
这些方法与标准Realm.copyToRealm()
大不相同,因为它们不返回任何对象。这使我们能够将内存分配减少到几乎为零,并且除去了许多纯粹开销的检查。这样做,我们从优化的SQLite实现速度降低了40%,到100K对象的速度降低了70%左右。
请注意,由于Realm的自动更新功能,甚至可以在保存数据之前查询数据,并在数据可用时收到通知。这对于那些你想单独从保存它显示的数据有极大好处:
final PersonApi api = new PersonApi();
Realm realm = Realm.getDefaultInstance();
RealmResults<Person> persons = realm.where(Person.class).findAllAsync();
person.addChangeListner(new RealmChangeListener() {
@Override
public void onChange(RealmResults<Person> persons) {
if (!persons.isEmpty()) {
// Callback when data is available
}
}
});
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.insertOrUpdate(api.getPersons());
}
});
不要'Zones','Deals'和'AffectingZones'延长'RealmObject'? – Dalinaum