Search code examples
javaandroidrealm

Realm adding new Data everytime with keeping old data


I am having a problem with realm. i am mapping jsonResponse to POJO, and my POJO contains realmList. so when i update it new values are appended to old values, but i need to have only new values not old values.

I have tried both insertOrUpdate as well as copyToRealmOrUpdate( ), but didnot help.

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();
                    }

This is my 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";
    }
}

this is my LatLng class.

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;
    }
}

Solution

  • First find the local savedObject using primaryKey if exists then delete all nested objects and then update the object.

    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);