【发布时间】:2015-11-19 17:19:36
【问题描述】:
我的 Realm 出了问题,让我的大脑感到不适 :(
问题是当我尝试将新对象添加到 RealmList 中时。对象已插入,但未与关系链接。
现在,我的数据库有多个关系:
用户 1-->M 旅行 1-->M 车辆 1-->M
然后:
车辆 1-->M VehicleInfo
VehicleInfo 1-->M 温度
当我尝试将新对象插入温度类时,问题就存在了。
我的班级:
车辆:
@RealmClass
public class Vehicle extends RealmObject
{
private String state; //R: Reservado | P: Listo para embarcar | E: Embarcado | P1: Pdte. confirmar medidas | P2: Tª no válida | R1: No embarca
private String locata = "";
private String customer = "";
private String customerCode = "";
private String originPort = ""; //Origin port
private String destinyPort = ""; //Destiny port
private int fp; //Method pay (0 = CASH | 1 = CREDIT)
//Relationship
private Trip trip; //Inverse
private RealmList<VehicleInfo> vehicleInfo = new RealmList<>(); //One-to-many
private RealmList<Observation> observations = new RealmList<>();; //One-to-many
.....
}
车辆信息:
@RealmClass
public class VehicleInfo extends RealmObject {
private String sv; //Vehicle type
private String licensePlate = ""; //License
private String seal = ""; //Seal
private String temperature = ""; //Temperature control
private String iv = ""; //Ida/Vuelta
private String commodityCode = "";
private int tara = 0; //TARA
private int packages = 0; //Bultos
private int weight = 0;
private double length = 0.0; //Meters
private boolean flagFT; //Flag Technical data
private boolean flagDua;
private boolean flagManifest;
private boolean flagTransport;
private boolean flagDangerCommodity;
//Relationship
private RealmList<Temperature> temperatures = new RealmList<>(); //One-to-many
....
}
我添加新温度的代码:
Temperature temp = new Temperature();
temp.setDate(appCommon.getCurrentTimeOrDate("DATE"));
temp.setTime(appCommon.getCurrentTimeOrDate("TIME"));
temp.setValue(Double.parseDouble(etTemp.getText().toString()));
VehicleInfoPersistence.updateVehicleInfoTemperature(realm, vehicle.getLocata(), selectedUnitPosition, temp);
updateRecycler(tempRecyclerAdapter, temp);
在 Realm 中查找和持久化的方法:
public static VehicleInfo findVehicleInfoFromLocata(Realm realm, String locata, int position) {
RealmQuery<Vehicle> query = realm.where(Vehicle.class).equalTo("locata", locata);
Vehicle realmVehicle = query.findFirst();
return realmVehicle.getVehicleInfo().get(position);
}
public static void updateVehicleInfoTemperature(Realm realm, String locata, int position, Temperature temperature) {
Vehicle vehicle = VehiclePersistence.findVehicleFromLocata(realm, locata);
realm.beginTransaction();
Temperature realmTemp = realm.copyToRealm(temperature);
vehicle.getVehicleInfo().get(position).getTemperatures().add(realmTemp);
realm.commitTransaction();
}
我说过,对象是在数据库中创建的,但它没有与车辆链接-->vehicleInfo-->温度。
我的代码有什么问题??
提前致谢:)
【问题讨论】:
-
加温后你不会错过
realm.copyToRealmOrUpdate(vehicle);吗? -
不起作用。失败并出现下一个异常:java.lang.IllegalArgumentException:无法更新没有 @PrimaryKey 的 RealmObject:class io.realm.VehicleRealmProxy :(
-
findVehicleFromLocata长什么样子? -
嗨@beeender 我已经编辑了我的问题并添加了 findVehicleFromLocata。谢谢:)
-
@AdaeRodríguez 您的代码看起来不错。您能否通过示例项目重现此问题并与我们分享代码?你可以发送到 help@realm.io
标签: android realm realm-list