Android. Ошибка при конвертации Set<String> в String[]

285
13 февраля 2017, 14:23

Пытаюсь достать данные из SharedPreference всей пачкой по ключу, но не получается конвертнуть результат в String[]

java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Set

String[] codeValues;

Делаю так:

private void loadCode() {
    preferences = getPreferences(MODE_PRIVATE);
    Set<String> codes = preferences.getStringSet("codes", new HashSet<String>());
    codeValues = codes.toArray(new String[codes.size()]);
    Toast.makeText(this, "Text loaded", Toast.LENGTH_SHORT).show();
}

Пробовал так еще:

private void loadCode() {
    preferences = getPreferences(MODE_PRIVATE);
    Set<String> codes = preferences.getStringSet("codes", new HashSet<String>() {
        @Override
        public int size() {
            return 0;
        }
        @Override
        public boolean isEmpty() {
            return false;
        }
        @Override
        public boolean contains(Object o) {
            return false;
        }
        @NonNull
        @Override
        public Iterator<String> iterator() {
            return null;
        }
        @NonNull
        @Override
        public Object[] toArray() {
            return new Object[0];
        }
        @NonNull
        @Override
        public <T> T[] toArray(T[] a) {
            return null;
        }
        @Override
        public boolean add(String s) {
            return false;
        }
        @Override
        public boolean remove(Object o) {
            return false;
        }
        @Override
        public boolean containsAll(Collection<?> c) {
            return false;
        }
        @Override
        public boolean addAll(Collection<? extends String> c) {
            return false;
        }
        @Override
        public boolean retainAll(Collection<?> c) {
            return false;
        }
        @Override
        public boolean removeAll(Collection<?> c) {
            return false;
        }
        @Override
        public void clear() {
        }
    });
    codeValues = codes.toArray(new String[codes.size()]);
    Toast.makeText(this, "Text loaded", Toast.LENGTH_SHORT).show();
}
Answer 1

Предположу, что у Вас в SharedPreference по этому ключу записан не сет, а что-то другое. Ошибка возникает, видимо, в момент извлечения сета.

READ ALSO
Inject не работает

Inject не работает

Как я понял не работает inject для private Logger logger;

457
Json не содержит список зависимых объектов

Json не содержит список зависимых объектов

Здравствуйте, столкнулся с проблемой: после конвертирования объекта в JSON, я не вижу в нем списка зависимых объектов, считанных из БДУ меня...

303
Строка на входе, нужно узнать является ли числом

Строка на входе, нужно узнать является ли числом

Обработка точки не работает правильно, голову сломалНе могу понять как написать надо

299
Hibernate. Join одного из полей сущности

Hibernate. Join одного из полей сущности

Начинаю изучать hibernate, возник вопрос

235