我无法找到我为什么
未捕获java.lang.AssertionError:无法将给定模型添加到ListStore,因为它(或具有相同键的其他模型)已存在。键=空
当我尝试将新对象添加到ListStore时。这是我的代码的一部分
private ListStore<Event> eventStore;
private static final EventProperties eventProp = GWT.create(EventProperties.class);
this.eventStore = new ListStore<>(eventProp.key()); // this is in constructor
public void run() {
try {
// вызываем метод для получения устройств
deviceData.getDevices(new BaseRequestCallback() {
@Override
public void onResponseReceived(Request request, Response response) {
if (200 == response.getStatusCode()) {
// в случае успешного ответа получаем список объектов
JsArray<Device> data = JsonUtils.safeEval(response.getText());
/** в цикле добавляем новые объекты или обновляем существующие */
/** если список пустой, добавляем в него все объекты из сервера */
if (deviceStore.size() <= 0) {
for (int i = 0; i < data.length(); i++) {
deviceStore.add(data.get(i));
eventStore.add(new Event(data.get(i).getName(), "Overspeed!"));
deviceCheckBoxActionVisible(data.get(i));
}
startFocused();
} else if (deviceStore.size() <= data.length()) {
/** Если из сервера пришло объектов больше, чем есть в списке */{
for (int i = 0; i < data.length(); i++) {
// проверяем соответствует ли каждому объекту в списке устройств устройство из сервера
if (deviceStore.get(i) == null) {
// если в списке нет устройства на позиции i - добавляем
deviceStore.add(data.get(i));
} else if (deviceStore.get(i).getId() == data.get(i).getId()) {
// если устройства на позиции i есть в обоих списках - обновляем
deviceStore.update(data.get(i));
eventStore.add(new Event(data.get(i).getName(), "Overspeed!"));
}
}
}
} else if (deviceStore.size() > data.length()) {
/** Если из сервера пришло объектов меньше, чем есть в списке */{
for (int i = 0; i < deviceStore.size(); i++) {
// проверяем соответствует ли каждому объекту в списке устройств устройство из сервера
if (data.get(i) == null) {
// если нет, удаляем устройство из списка
deviceStore.remove(i);
// и делаем шаг назад, так как количество устройств в списке уменьшилось на 1
i--;
} else if (data.get(i) == deviceStore.get(i)) {
// если на месте в списке устройств есть устройство и в списке из сервера - обновляем
deviceStore.update(data.get(i));
eventStore.add(new Event(data.get(i).getName(), "Overspeed!"));
}
}
}
}
} else {
// при ошибке получения данных отображаем соответствующее сообщение с кодом ошибки (console!)
LoggerHelper.getLogInfo(className, "Bad response from server. Response status code: " + response.getStatusCode());
}
}
});
} catch (RequestException e) {
LoggerHelper.getLogInfo(className, "Error while getting devices. No response from server.", e);
}
}
当代码第一次运行时
if (deviceStore.size() <= 0)
新事件(data.get(i).getName(),“Overspeed!”)添加得很好。但是当运行具有这种条件的代码时
else if (deviceStore.size() <= data.length())
我得到了AssertionError。谁能解释为什么?因为我有三个ListStores和其他两个好的作品。 提前谢谢。