如何在不同活动之间传递一个双精度二维数组?

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异常,我做错什么了吗?

你需要设置ArrayExtra。在谷歌上搜索相关信息。 - Pragnani
二维数组没有预设的ArrayExtra。 - user2137817
如何将二维数组转换为一维数组?你也可以传递第一维的长度。 - dongshengcn
2个回答

4
双精度浮点型二维数组转换为字符串二维数组 并像您之前一样发送它:
发送方式如下:
b.putSerializable("array", other_locations_string);

获取:

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

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

这种行为的原因是因为Java(以及因此Android)不允许您将对象强制转换为基本类型或基本类型数组。为什么?因为Java认为一个有效的转换是将超类对象转换为子类对象或反之亦然。而String[][]扩展了Object,而doubledouble[][]则没有。


这种行为的原因是因为Java(以及Android)不允许将对象强制转换为基本数据类型或基本数据类型的数组,例如double或int。这是因为虽然String [][ ]扩展了Object,但double [][ ]却没有。 - Abraham Philip

1

请尝试以下操作

将二维数组转换为哈希表,然后使用它

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

将地图设置为意图额外信息,并在第二个活动中获取额外信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接