我一直在研究一个程序,该程序将一系列计划事件(自制ServiceRequest
对象)存储在xml文件(f
)中,当我想使用它们时,我调用了一个readData()
方法(见下文),该方法将ServiceRequest
加载到serviceQueue
(ArrayList<ServiceRequest>
)中,并在文件末尾标记一个null
对象以标记ServiceRequest
对象的末尾。
当我加载数组中的对象时,我一直在检查事件的日期(LocalDate
对象)以删除超过 270 天的事件。现在这是我的问题:在将整数 270 更改为 180 以尝试跟踪更少的数据后,大多数事件都被删除了(即不应该的当前事件,就像今天的所有事件一样......从字面上看,这是我唯一更改的内容,一旦我切换回 270 并从备份中恢复事件,一切都恢复正常。210似乎也导致我的评估失败。
不确定我错过了什么,也许是关于如何评估LocalDate.now().minusDays(XXX)
?如果需要,我可以包含更多代码,但这是我唯一更改的内容,并且该方法非常基本:
public static void readData() {
serviceQueue.clear();
try {
Boolean complete = false;
FileReader reader = new FileReader(f);
ObjectInputStream in = xstream.createObjectInputStream(reader);
while(complete != true) {
ServiceRequest test = (ServiceRequest)in.readObject();
if(test != null && test.getDate().isAfter(LocalDate.now().minusDays(210))) {
serviceQueue.add(test); }
else { complete = true; }
}
in.close(); }
catch (IOException | ClassNotFoundException e) { e.printStackTrace(); }
}
我使用 LocalDateTime
变量 start
和 stop
来跟踪事件的日期/时间,因此 .getDate()
方法只是以LocalDate
格式返回start
:
public LocalDate getDate() { return start.toLocalDate(); }
datę 检查没问题。问题是将complete
设置为true
,以防日期不匹配。
if(test != null &&test.getDate().isAfter(LocalDate.now().minusDays(210))) {
serviceQueue.add(test); }
else { complete = true; }
尝试以下代码:
if(test != null) {
if (test.getDate().isAfter(LocalDate.now().minusDays(210)) {
serviceQueue.add(test);
}
}
else {
complete = true;
}