java AssertionError:无法将给定模型添加到ListStore
我不明白为什么我会
Uncaught java.lang.AssertionError: The given model cannot be added to the ListStore as it (or another model with the same key) is already present. Key=null
当我试图向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(),“超速!”)添加得很好。但是当运行具有这种条件的代码时
else if (deviceStore.size() <= data.length())
我越来越自信了。有人能解释为什么吗?因为我有三个列表商店,另外两个很好用。 提前谢谢
共 (0) 个答案