java.lang.ClassCastException: java.util.ArrayList не может быть преобразован в java.lang.Объект[]

#java #android

#java #Android

Вопрос:

В моем проекте Android я хочу создать универсальный класс для хранения всех типов объектов в SharedPreferences, но выдает ошибку :

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Object[]

вот мой код :

 public ArrayList<E> getItems(Context context) {
        android.content.SharedPreferences settings;
        List<E> objects ;
        settings = context.getSharedPreferences(PREF_NAME,
                Context.MODE_PRIVATE);

        if (settings.contains(ITEM_NAME)) {
            String json = settings.getString(ITEM_NAME, null);
            GsonBuilder gson = new GsonBuilder();
            Type collectionType = new TypeToken<List<E>>(){}.getType();

            E[] items = gson.create().fromJson(json,
                    collectionType);  // in this line occurs error


            objects = new ArrayList<E>(Arrays.asList(items));
        } else
            return null;

        return (ArrayList<E>) objects;
    }
  

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

1. Ошибка говорит сама за себя. Вы пытаетесь преобразовать a ArrayList[] в an Object[] .

2. Другими словами, у вас уже был ArrayList , как вы могли обнаружить из Javadoc, а также более или менее точно так, как вы просили, когда указывали collectionType . Нет необходимости создавать еще один.

Ответ №1:

Попробуйте:

 List<E> items = gson.create().fromJson(json, collectionType);
  

Это исключение жалуется на то, что у вас был объект ArrayList (который был возвращен из fromJson() ), но вы попытались преобразовать его в массив с этим присвоением E[] items .