【问题标题】:Add new object into relationship in Realm将新对象添加到领域中的关系中
【发布时间】: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


【解决方案1】:

我解决了我的问题:)

由于某种原因,当我尝试将新对象添加到 RealmClass 的子数组中时,领域会失败。

为了解决这个问题,我创建了一个中间对象,然后将该对象添加到这个中间对象中。

public static void updateVehicleInfoTemperature(Realm realm, String locata, int position, Temperature temperature) {

    Vehicle vehicle = VehiclePersistence.findVehicleFromLocata(realm, locata);

    realm.beginTransaction();

    VehicleInfo vInfo            = vehicle.getVehicleInfo().get(position);
    VehicleInfo realmVehicleInfo = realm.copyToRealm(vInfo);
    Temperature realmTemp        = realm.copyToRealm(temperature);
    realmVehicleInfo.getTemperatures().add(realmTemp);

    realm.commitTransaction();
}

我希望能帮助到某人:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多