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

Realm adding new Data everytime with keeping old data

我遇到了 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 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;
    }
}

首先使用primaryKey找到本地savedObject,如果存在则删除所有嵌套对象,然后更新对象。

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