2 回答
TA贡献1858条经验 获得超8个赞
除了回调,您还可以使用 一个Predicate来决定是否需要再次拨打电话。
我在这里1演示了带有 Thread 的异步服务调用。这可能适合您,也可能不适合。如果您能向我们展示在服务返回响应后如何调用回调,将会更有帮助。
public void getMessages(Date from, Date to, Predicate<List<Message>> shouldMakeAnotherCall) {
new Thread(() -> {
List<Message> messages = //Call service
if (shouldMakeAnotherCall.apply(messages)) {
getMessages(from, to, shouldMakeAnotherCall);
}
}).start();
}
Predicate<List<Message>> shouldMakeAnotherCall = listOfMessages -> listOfMessages.size() == 2000;
getMessages(from, to, shouldMakeAnotherCall);
1这使得后续调用每个都创建一个新线程,因此不是一个很好的调用。
TA贡献1777条经验 获得超10个赞
这个怎么样?
List<Message> allMessages = new ArrayList<>();
Callback<List<Message>> onSuccessCallback = 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, toDate, onSuccessCallback);
}
};
getMessages(fromDate, toDate, onSuccessCallback);
添加回答
举报