我对realm
有疑问。我正在将jsonResponse
映射到POJO
,而我的POJO
包含realmList
。因此,当我对其进行更新时,新值将附加到旧值上,但是我只需要具有新值而不是旧值即可。
我同时尝试了insertOrUpdate
和copyToRealmOrUpdate
(),但没有帮助。
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;
}
}
答案 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);