#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[]
в anObject[]
.2. Другими словами, у вас уже был
ArrayList
, как вы могли обнаружить из Javadoc, а также более или менее точно так, как вы просили, когда указывалиcollectionType
. Нет необходимости создавать еще один.
Ответ №1:
Попробуйте:
List<E> items = gson.create().fromJson(json, collectionType);
Это исключение жалуется на то, что у вас был объект ArrayList (который был возвращен из fromJson()
), но вы попытались преобразовать его в массив с этим присвоением E[] items
.