4

アクティビティ間で double の 2D 配列を渡す必要があります。これまでに書いたものです。最初のアクティビティ (送信者) で:

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

2番目のもの(レシーバー):

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

しかし、私は ClassCastException を受け取りました。何か間違ったことをしていますか?

4

2 に答える 2

4

double 2D 配列を String 2D 配列に変換し、同じように送信します。

送信するには:

b.putSerializable("array", other_locations_string);

取得するため :

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

そして、再度 double 2d array に変換します。

この動作の理由は、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]);
}

マップをインテント エクストラとして設定し、2 番目のアクティビティでエクストラを取得します

于 2013-04-08T16:25:40.850 に答える