java.lang.ClassCastException:java.util.ArrayList不能转换为java.lang.Object[]
在我的android项目中,我想创建一个泛型类来存储SharedReferences中所有类型的实体,但给出了错误:java.lang.ClassCastException:java.util.ArrayList不能转换为java.lang.Object[],java,android,Java,Android,在我的android项目中,我想创建一个泛型类来存储SharedReferences中所有类型的实体,但给出了错误: java.lang.ClassCastException:java.util.ArrayList不能强制转换为java.lang.Object[] 这是我的密码: public ArrayList<E> getItems(Context context) { android.content.SharedPreferences settings;
java.lang.ClassCastException:java.util.ArrayList不能强制转换为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;
}
public ArrayList getItems(上下文){
android.content.SharedReferences设置;
列出对象;
设置=context.getSharedReferences(首选名称,
上下文。模式(私人);
if(设置.包含(项目名称)){
String json=settings.getString(项名称,空);
GsonBuilder gson=新的GsonBuilder();
Type collectionType=new-TypeToken(){}.getType();
E[]items=gson.create().fromJson(json,
collectionType);//此行发生错误
objects=newarraylist(Arrays.asList(items));
}否则
返回null;
返回(ArrayList)对象;
}
试试:
List items=gson.create().fromJson(json,collectionType);
该异常抱怨您有一个ArrayList对象(它是从
fromJson()
返回的),但您试图将它强制转换为一个数组,并将该赋值赋给E[]items
,错误说明了一切。您正试图将ArrayList[]
强制转换为对象[]
。换句话说,您已经有了ArrayList
,这是您可以从Javadoc中发现的,并且或多或少与您在指定collectionType
时要求的一样。不需要再创建一个。
List<E> items = gson.create().fromJson(json, collectionType);