【发布时间】:2014-12-29 04:52:17
【问题描述】:
我有这个收藏
ArrayList<int[]>[] myList;
即整数数组的ArrayLists数组。我正在尝试传递它。
intent.putExtra(getString(R.string.app_name) + ".myList", myList);
在新的活动中,我尝试获得额外的:
ArrayList<int[]>[] myList;
Intent intent = getIntent();
myList = (ArrayList<int[]>[]) intent.getSerializableExtra(getString(R.string.app_name) + ".myList");
但是我在该行中遇到了类转换异常。
Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.util.ArrayList[]
由于它们包含原始类型的数组,而 ArrayList 本身就是一个可序列化的类,我不知道为什么这不起作用或有什么更好的方法。
编辑
似乎不能只将 Object[] 转换为 CustomClass[]
检查:
Quick Java question: Casting an array of Objects into an array of my intended class
casting Object array to Integer array error
所以一种解决方案是
Object[] tmp = (Object[]) intent.getSerializableExtra(getString(R.string.app_name) + ".myList");
myList = Arrays.copyOf(tmp, tmp.length, ArrayList[].class);
或者,可以传递和检索一个 ArrayList
// Calling Activity
ArrayList<ArrayList<int[]>> myIntentList = new ArrayList(Arrays.asList(myList));
intent.putExtra(getString(R.string.app_name) + ".myList", myIntentList);
// Called Activity
ArrayList<ArrayList<int[]>> myIntentList;
myIntentList = ArrayList<ArrayList<int[]>> intent.getSerializableExtra(getString(R.string.app_name) + ".myList");
【问题讨论】:
-
您对此有无可辩驳的证据吗?因为类转换异常似乎是在说
ArrayList[]已通过 Java 序列化/反序列化变成了Object[],并且没有通过证据“气味测试”。
标签: java android android-intent arraylist