有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案