AssertionError:无法将给定模型添加到ListStore

时间:2016-04-20 11:04:27

标签: java gwt gxt

我无法找到我为什么

  

未捕获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和其他两个好的作品。 提前谢谢。

0 个答案:

没有答案