领域Android insertOrUpdate未更新
api响应(www.railwayapi.com/api/#站间列车)不包含任何PrimaryKey字段(api不在我的控制之下),因此我创建了另一个类并设置PK和对它的响应。 我在StackOverflow上问了所有类似的问题,并做了相应的回答。但数据(通过改型获取)仍在重复插入领域,而不是更新。我如何解决这个问题 这就是我将数据保存到领域的方式:(已编辑)领域Android insertOrUpdate未更新,android,realm,Android,Realm,api响应(www.railwayapi.com/api/#站间列车)不包含任何PrimaryKey字段(api不在我的控制之下),因此我创建了另一个类并设置PK和对它的响应。 我在StackOverflow上问了所有类似的问题,并做了相应的回答。但数据(通过改型获取)仍在重复插入领域,而不是更新。我如何解决这个问题 这就是我将数据保存到领域的方式:(已编辑) 由于SearchResultsResponse没有主键,您将获得重复 基于您正在使用的API { "response_code"
由于
SearchResultsResponse
没有主键,您将获得重复
基于您正在使用的API
{
"response_code": 200,
"error": "",
"position": "Train has reached Destination and late by 5 minutes.",
"train_number": "12046",
"route": [
{
"no": 1,
"station_": {
"name": "CHANDIGARH",
"code": "CDG"
},
"has_arrived": false,
"has_departed": true,
"day": 0,
"distance": 0,
"scharr": "Source",
"schdep": "12:00",
"actarr": "00:00",
"actdep": "12:00",
"scharr_date": "19 Nov 2015",
"actarr_date": "19 Nov 2015",
"latemin": 0
},
{
"no": 2,
"station_": {
"name": "AMBALA CANT JN",
"code": "UMB"
},
"has_arrived": true,
"has_departed": true,
"day": 0,
"distance": 67,
"scharr": "12:40",
"schdep": "12:42",
"actarr": "12:40",
"actdep": "12:42",
"scharr_date": "19 Nov 2015",
"actarr_date": "19 Nov 2015",
"latemin": 0
},
{
"no": 3,
"station_": {
"name": "NEW DELHI",
"code": "NDLS"
},
"has_arrived": true,
"has_departed": false,
"day": 0,
"distance": 265,
"scharr": "15:25",
"schdep": "Destination",
"actarr": "15:30",
"actdep": "00:00",
"scharr_date": "19 Nov 2015",
"actarr_date": "19 Nov 2015",
"latemin": 5
}
]
}
在我看来,您应该构建以下RealmObject:
public class TrainRoute extends RealmObject {
@PrimaryKey
private String key; // train_number + station_code + scharr_date + scharr
private long trainNumber;
private int no;
private String stationName;
private String stationCode;
private boolean hasArrived;
private boolean hasDeparted;
private int day;
private int distance;
private String scharr;
private String schdep;
private String actarr;
private String actdep;
private String scharrDateText;
private String actarrDateText;
private Date scharrDate;
private Date actarrDate;
private int latemin;
// getter setter
}
之后,您的主键应该是特定的和相同的,并且它们不应该相互覆盖。您会得到重复,因为
SearchResultsResponse
没有主键
基于您正在使用的API
{
"response_code": 200,
"error": "",
"position": "Train has reached Destination and late by 5 minutes.",
"train_number": "12046",
"route": [
{
"no": 1,
"station_": {
"name": "CHANDIGARH",
"code": "CDG"
},
"has_arrived": false,
"has_departed": true,
"day": 0,
"distance": 0,
"scharr": "Source",
"schdep": "12:00",
"actarr": "00:00",
"actdep": "12:00",
"scharr_date": "19 Nov 2015",
"actarr_date": "19 Nov 2015",
"latemin": 0
},
{
"no": 2,
"station_": {
"name": "AMBALA CANT JN",
"code": "UMB"
},
"has_arrived": true,
"has_departed": true,
"day": 0,
"distance": 67,
"scharr": "12:40",
"schdep": "12:42",
"actarr": "12:40",
"actdep": "12:42",
"scharr_date": "19 Nov 2015",
"actarr_date": "19 Nov 2015",
"latemin": 0
},
{
"no": 3,
"station_": {
"name": "NEW DELHI",
"code": "NDLS"
},
"has_arrived": true,
"has_departed": false,
"day": 0,
"distance": 265,
"scharr": "15:25",
"schdep": "Destination",
"actarr": "15:30",
"actdep": "00:00",
"scharr_date": "19 Nov 2015",
"actarr_date": "19 Nov 2015",
"latemin": 5
}
]
}
在我看来,您应该构建以下RealmObject:
public class TrainRoute extends RealmObject {
@PrimaryKey
private String key; // train_number + station_code + scharr_date + scharr
private long trainNumber;
private int no;
private String stationName;
private String stationCode;
private boolean hasArrived;
private boolean hasDeparted;
private int day;
private int distance;
private String scharr;
private String schdep;
private String actarr;
private String actdep;
private String scharrDateText;
private String actarrDateText;
private Date scharrDate;
private Date actarrDate;
private int latemin;
// getter setter
}
之后,您的主键应该是特定的、相同的,并且它们不应该相互覆盖。不应该
wpk.setPk(“from+to”)
是'wpk.setPk(from+to);`?您操作了jsonResponse
,但插入了一个完全无关的对象<代码>领域.insertOrUpdate(wpk)代码>@Christian Melchior粘贴在这里是个错误…我现在已经更新了。。。实际代码是realm.insertOrUpdate(jsonResponse)。现在请看一看。如果你用这个创建一个小样本项目,可能会更好。您的代码看起来不错,但是如果jsonResponse.setKey(SSC+DSC+DATE)代码>如果无法正常工作,您将获得重复的对象。从粘贴的代码中,不可能看到如何检索这些值。好的。。我将很快在这里发布项目链接。。顺便说一句,jsonResponse.setKey(SSC+DSC+日期);由EpicPandaForce提供建议,从以下评论中可以看出。我的方法是将response对象和另一个PK对象设置为一个附加类,然后保存在Realm中。但这也没有成功。我甚至试过复制或更新。如果我不能控制api格式,请解释如何设置主键而不重复?wpk.setPk(“from+to”)不应该是'wpk.setPk(from+to);'?您操作了jsonResponse
,但插入了一个完全无关的对象<代码>领域.insertOrUpdate(wpk)代码>@Christian Melchior粘贴在这里是个错误…我现在已经更新了。。。实际代码是realm.insertOrUpdate(jsonResponse)。现在请看一看。如果你用这个创建一个小样本项目,可能会更好。您的代码看起来不错,但是如果jsonResponse.setKey(SSC+DSC+DATE)代码>如果无法正常工作,您将获得重复的对象。从粘贴的代码中,不可能看到如何检索这些值。好的。。我将很快在这里发布项目链接。。顺便说一句,jsonResponse.setKey(SSC+DSC+日期);由EpicPandaForce提供建议,从以下评论中可以看出。我的方法是将response对象和另一个PK对象设置为一个附加类,然后保存在Realm中。但这也没有成功。我甚至试过复制或更新。请解释一下,如果我不能控制api格式,那么如何设置主键而不重复?我试过了,但还是一样。我已经更新了上述代码。请查收。我设置PK的方式错了吗?你甚至不应该有一个SearchResultsResponse
class对不起,我没有理解你。为什么?这是反应课。还有内部类。我还没有把它们寄出去。我应该吗?我已经更新了问题,请检查。我正在获取数据,甚至正在插入。问题是它没有每次更新实际上我想知道为什么数据没有得到更新?难道我没有正确编码insertOrUpdate吗?我已经坐了三个月了,但我一直都在做这个。我试过了,但还是一样。我已经更新了上述代码。请查收。我设置PK的方式错了吗?你甚至不应该有一个SearchResultsResponse
class对不起,我没有理解你。为什么?这是反应课。还有内部类。我还没有把它们寄出去。我应该吗?我已经更新了问题,请检查。我正在获取数据,甚至正在插入。问题是它没有每次更新实际上我想知道为什么数据没有得到更新?难道我没有正确编码insertOrUpdate吗?我已经坐了3个月了,一直都在做这件事。
public class TrainRoute extends RealmObject {
@PrimaryKey
private String key; // train_number + station_code + scharr_date + scharr
private long trainNumber;
private int no;
private String stationName;
private String stationCode;
private boolean hasArrived;
private boolean hasDeparted;
private int day;
private int distance;
private String scharr;
private String schdep;
private String actarr;
private String actdep;
private String scharrDateText;
private String actarrDateText;
private Date scharrDate;
private Date actarrDate;
private int latemin;
// getter setter
}