领域每次都添加新数据并保留旧数据

时间:2019-05-07 17:40:08

标签: java android realm

我对realm有疑问。我正在将jsonResponse映射到POJO,而我的POJO包含realmList。因此,当我对其进行更新时,新值将附加到旧值上,但是我只需要具有新值而不是旧值即可。

我同时尝试了insertOrUpdatecopyToRealmOrUpdate(),但没有帮助。

AddFarmCoordinatesResponse addFarmCoordinatesResponse = GsonUtils.fromGson( basicResponse.getResponse(), AddFarmCoordinatesResponse.class );
                    if (!NetworkErrorHandlingUtils.ErrorCheck( errorCode )) {
                        //  update farmerMutableLiveData Details...
                        try (Realm realm = Realm.getDefaultInstance()) {
                            //  update verification Response...
                            realm.executeTransaction( realm1 -> realm1.insertOrUpdate( addFarmCoordinatesResponse ) );
                        }
                        startWeatherForeCastJob();
                    }

这是我的AddFarmCoordinatesResponse.java。

public class AddFarmCoordinatesResponse extends RealmObject {

    private String id;

    @SerializedName("path")
    private RealmList<LatLng> path;

    @SerializedName("lastUpdated")
    private long lastUpdated;

    @PrimaryKey
    private String farmerId;

    @SerializedName("farmerReferenceId")
    private String farmerReferenceId;

    @SerializedName("creationTime")
    private long creationTime;

    @SerializedName("state")
    private String state;

    private boolean isPlotAdded;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public RealmList<LatLng> getPath() {
        return path;
    }

    public void setPath(RealmList<LatLng> path) {
        this.path = path;
    }

    public long getLastUpdated() {
        return lastUpdated;
    }

    public void setLastUpdated(long lastUpdated) {
        this.lastUpdated = lastUpdated;
    }

    public String getFarmerId() {
        return farmerId;
    }

    public void setFarmerId(String farmerId) {
        this.farmerId = farmerId;
    }

    public String getFarmerReferenceId() {
        return farmerReferenceId;
    }

    public void setFarmerReferenceId(String farmerReferenceId) {
        this.farmerReferenceId = farmerReferenceId;
    }

    public long getCreationTime() {
        return creationTime;
    }

    public void setCreationTime(long creationTime) {
        this.creationTime = creationTime;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public boolean isPlotAdded() {
        return isPlotAdded;
    }

    public void setPlotAdded(boolean plotAdded) {
        isPlotAdded = plotAdded;
    }

    public static class Constants {
        public static final String FARMER_ID = "farmerId";
        public static final String FARM_COORDINATES = "path";
    }
}

这是我的LatLng班。

public class LatLng extends RealmObject {

    private double latitude;
    private double longitude;

    public LatLng() {

    }

    public LatLng(double latitude, double longitude) {
        this.latitude = latitude;
        this.longitude = longitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public void setLattitude(double latitude) {
        this.latitude = latitude;
    }

    public double getLatitude() {
        return latitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public double getLongitude() {
        return longitude;
    }
}

1 个答案:

答案 0 :(得分:1)

首先使用primaryKey查找本地保存的对象(如果存在),然后删除所有嵌套对象,然后更新对象。

AddFarmCoordinatesResponse addFarmCoordinatesResponseRealm=realm1.where(AddFarmCoordinatesResponse.class)
    .equalTo("farmerId",addFarmCoordinatesResponse.getFarmerId())
    .findFirst();
    if(addFarmCoordinatesResponseRealm!=null && addFarmCoordinatesResponseRealm.getPath()!=null){
    addFarmCoordinatesResponseRealm.getPath().deleAllFromRealm;
    }

    then call realm1.insertOrUpdate( addFarmCoordinatesResponse);