2012-06-12 2 views
0

Я хочу поставить int[] в Android Intent. По разным причинам я получаю LinkedList<Integer>, поэтому я попытался (примерно) это:Целое число [] не работает в намерении # putExtra (...)

LinkedList<Integer> myList = getIntegerList(); 
Intent intent = new Intent (context, class); 
intent.putExtra("com.me.INTARRAY", myList.toArray()); 

Это не сработало, потому что toArray() давал мне Object[]. Я думал, что я мог бы это исправить, делая

intent.putExtra("com.me.INTARRAY", (Integer[]) myList.toArray(new Integer[myList.size()])) 

, который действительно производит Integer[]; однако получение его из Intent STILL не работает.

В конце концов, это не слишком трудно работать вокруг с for петли, таким образом я просить больше любопытства, чем какая-либо другая причина, но ... как вы получите Integer[] в Intent дополнительный, как если бы это было в int[]?

ответ

3

Я не проверял это хорошо, но я считаю, что это должно работать. Можешь попробовать.

Integer[] integerArray = {/*something */ }; 
intent.putExtra("com.me.INTARRAY", integerArray); 

И затем (не работает)

Целое [] newArray = (целое число []) getIntent() getSerializableExtra ("com.me.INTARRAY").

EDIT: Ааа .. После небольшого исследования и тестирования кажется выше не возможно. Это невозможно, потому что компилятор должен будет проходить через каждый элемент для проверки приведения. Решение (и я testet этот раз) будет делать это вместо:

Object[] s = (Object[]) getIntent().getSerializableExtra("com.me.INTARRAY"); 
Integer[] newArray = Arrays.copyOf(s, s.length, Integer[].class); 

Я нашел объяснение здесь: Deserializing Arrays on Android

+0

Dang. 'for' loop это тогда! –

0

Вы можете изменить массив на int [] и передать его как дополнительные функции, используя putExtra(java.lang.String, int[]). С другой стороны вам нужно будет получить дополнительную информацию, используя getIntArrayExtra.

Вот код, который работает отлично, вызывающий первый и приемник следующим образом:

LinkedList<Integer> myList = getIntegerList();; 
int iArray[] = new int[myList.size()]; 
for (Integer i : myList) 
iArray[myList.indexOf(i)] = i; 
Intent intent = new Intent();// create your actual intent 
intent.putExtra("com.your.package.name.int", iArray); 
startActivity(intent); 

и другая сторона:

int array[] = getIntent().getExtras().getIntArray("com.your.package.name.int"); 

Другой альтернативный, (что лучше я думаю) будет конвертировать LinkedList для Integer ArrayList. Это работает следующим образом.

intent.putIntegerArrayListExtra("com.your.package.name.array", new ArrayList<Integer>(myList)); 

и с другой стороны:

ArrayList<Integer> array = getIntent().getExtras().getIntegerArrayList("com.your.package.name.array"); 

Надеется, что это помогает :)

+0

Не на самом деле я боюсь, так как это именно то, что я пытался, и не удалось, сделать. В конце я использовал цикл 'for' для вставки элементов' LinkedList' в массив. –

+0

@ Andrew Wyld: Боюсь, вы использовали бы это неправильно. Его для int [], а не Integer []. Я пробовал это в конце и отлично работал. Будет также редактировать мой пост, чтобы добавить пример кода для вас. – Hassan

+0

@AndrewWyld: Вторая альтернатива избавит вас от цикла. И если это помогает и работает для вас, не забудьте принять ответ :) – Hassan

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