我在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
}
}
]
}
]
}
答案 0 :(得分:0)
<强> copyToRealmOrUpdate 强>
public java.util.List copyToRealmOrUpdate(java.lang.Iterable objects)
更新由RealmObjects
标识的现有PrimaryKey
列表,或者如果找不到现有对象,则创建新副本。
确保PrimaryKey
主表中有copyToRealmOrUpdate
coulmn才能正常工作。
自Realm v1.1.0以来,他们提出了一些优化,现在提供4种新方法,你可以使用它
这些方法与标准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());
}
});