4

我需要在活动之间传递一个二维数组,这是我到目前为止写的:在第一个活动(发件人)中:

Intent intent =new Intent(MapsActivity.this, RoutePath.class);
Bundle b = new Bundle();
b.putSerializable("other_locations", other_locations);
intent.putExtras(b);
startActivity(intent);

在第二个(接收器)中:

Intent intent = getIntent();
Bundle b = intent.getExtras();
double[][] other_locations=(double[][]) b.getSerializable("other_locations");

但是我得到了 ClassCastException,我做错了什么吗?

4

2 回答 2

4

双 2D 数组转换为 String 2D 数组并像您一样发送它:

发送 :

b.putSerializable("array", other_locations_string);

要得到 :

String[][] value = (String[][]) b.getSerializable("array");

然后再次将其转换为双 2d 数组

这种行为的原因是因为 Java(以及 Android)不允许您将对象转换为原始类型或原始类型数组。为什么?因为 Java 考虑了一个有效的转换,它将超类对象转换为子类对象,反之亦然。String[][]extends Object,而 double 和double[][]do not。

于 2013-04-08T16:32:49.323 回答
1

试试这个

将 2D Array 转换为 Hashmap 然后使用

Map<Double, Double> map = new HashMap<Double, Double>(other_locations.length);
for (Double[] mapping : other_locations)
{
    map.put(mapping[0], mapping[1]);
}

并将地图设置为额外的意图并在第二个活动中获得额外的

于 2013-04-08T16:25:40.850 回答