Попал под исключение UnsupportedOperationException

#android

#Android

Вопрос:

У меня есть следующий код:

     private static ArrayAdapter<String> adapter;
    private static List<Chapter> chapters;

    public void update(Book book) {
        adapter.clear();
        if (chapters != null) {
            chapters.clear();
        }
        chapters = DataBaseConnector.getChaptersFromBook(book.getID());
        for (Chapter chapter : chapters) {
            adapter.add(chapter.getTitle());
        }
        header.setText(book.getAbbreviation());
        subHeader.setText(book.getName()   " ("   book.getNumber()   ")");
        subHeader.setVisibility(View.VISIBLE);
    }
  

Если я вызываю метод, update(Book book) а переменной chapters нет null , я получаю сообщение об ошибке UnsupportedOperationException в строке chapters.clear() . Есть какие-либо подсказки, как решить проблему?

Комментарии:

1. Я полагаю, что вам могло бы сойти с рук отсутствие необходимости «очищать» ваш список, поскольку вы просто переназначаете его в самой следующей строке.

Ответ №1:

Мне пришлось бы взглянуть на документацию API, но, по-видимому, DataBaseConnector.getChaptersFromBook(book.getID()) вызов возвращает неизменяемый список, поэтому вы не можете его изменить. Похоже, вам придется создать локальную копию.

Комментарии:

1. Как я могу проверить, возвращает ли метод неизменяемый список? Я написал этот метод самостоятельно.

2. Какой конкретный тип вы используете для создания этого списка?

3. @nicholas. hauschild java.util.List

4. Когда вы используете оператор ‘new’, какой тип он фактически создает?

5. @nicholas. хаушильд Ах, хорошо, я вижу, список создается с использованием Arrays.asList

Ответ №2:

Согласно документам Android (а также JavaDocs для интерфейса List):

«Выдает исключение UnsupportedOperationException, если удаление из этого списка не поддерживается».

Я предполагаю, что используемая реализация не поддерживает метод clear ().