我需要在给定的时间间隔内从服务中获取消息。
我向我的服务提出请求,在那里我指定了 FROM 日期和 TO 日期。但是该服务从 FROM 日期开始,最多 2000 条消息,然后它返回给我那 2000 条消息,即使没有达到 TO 日期,也不会更多。
因此,如果我想获取所有消息,我必须检查每个响应,如果有 2000 条消息,那么我需要发出另一个请求,将 FROM 日期指定为返回的最后一条消息的日期。依此类推,直到我到达 TO 日期。
假设该方法如下所示:
public void getMessages(Date from, Date to, Callback<List<Message>> onSuccess);
所以我试着这样写:
List<Message> allMessages = new ArrayList<>();
getMessages(fromDate, toDate, messages -> {
//save all the messages returned
allMessages.addAll(messages);
if(messages.size()==2000){
//get the last message date
Date nextDate = messages.get(messages.size() - 1).getDateTime();
//query next messages
getMessages(nextDate, to, onSuccess); //and here I am screwed in what to put in the onSuccess again...
}
});
如何做到这样它会继续一定数量的步骤,或者在它最终到达 TO 日期时停止?我什至可以更改 getMessages() 方法,但是我从 HTTP 请求中获取数据,因此需要通过回调来完成。
更新: 感谢所有答案,基于它们我想出了一个简单的解决方案。
我创建了一个这样的方法:
private void checkMessages(List<Message> messages, Date toDate, List<Message> allMessages) {
// save all the messages returned
allMessages.addAll(messages);
if (messages.size() == 2000) {
// get the last message date
Date nextDate = messages.get(messages.size() - 1).getDateTime();
// query next messages
getMessages(nextDate, toDate,
msgs -> checkMessages(msgs, toDate, allMessages));
} else {
// else we are finished
messageTable.setMessages(allMessages);
}
}
我在回调中使用了这个方法:
List<Message> allMessages = new ArrayList<>();
getMessages(fromDate, toDate,
messages -> checkMessages(messages, toDate, allMessages));
这绝对不是理想的,但它似乎正在起作用。
猛跑小猪
不负相思意
相关分类