2013-04-08 2 views
4

мне нужно передать 2D массив двойных между деятельностью, это то, что я написал до сих пор: В первой деятельности (отправитель):Как пройти двумерный массив двойного действия?

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, я что-то не так?

+0

Вам необходимо установить ArrayExtra .. Искать в google о том же – Pragnani

+0

не существует ArrayExtra для 2d массивов – user2137817

+0

конвертировать 2D массив один массив 1D? вы также можете пройти по длине первого измерения. – dongshengcn

ответ

4

Преобразование двойной 2D массив в строку 2D-массив и отправьте его точно так же, как вы:

Для отправки:

b.putSerializable("array", other_locations_string); 

Чтобы получить:

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

А потом снова превратить его в двойной 2d массив.

Причина такого поведения заключается в том, что Java (и, следовательно, Android) не позволяет вам вводить объекты в примитивные типы или массивы примитивных типов. Зачем? Поскольку Java считает допустимым листинг, который преобразует объект суперкласса в объект подкласса или наоборот. String[][] распространяется Object, в то время как двойной и double[][] нет.

+0

Причина такого поведения заключается в том, что Java (и, следовательно, Android) не позволяет вам вводить объекты в примитивные типы данных или массивы примитивных типы данных, такие как double или int. Это связано с тем, что в то время как String [] [] расширяет Object, double [] [] этого не делает. –

1

Попробуйте

Преобразование 2D массива в Hashmap, а затем использовать его

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

и установить карту, как намерение дополнительных и получить дополнительное во второй активности

+0

не работал, намерение не принимало его в качестве дополнительного – user2137817

Смежные вопросы