2012-06-12 5 views
0

int[]을 Android Intent에 넣으 려합니다. 여러 가지 이유를 들어 나는 LinkedList<Integer>을 얻고있다, 그래서 나는 (약) 노력이 :Integer [] Intent # putExtra (...)에서 작동하지 않습니다.

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

toArray()이 나에게 Object[]을 제공했기 때문에이 작동하지 않았다. 나는 참으로 Integer[]를 생산 않는 내가

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

을 수행하여 문제를 해결할 수 있다고 생각; 그러나 Intent 여전히 꺼내는 것은 작동하지 않습니다.

는 궁극적으로이 그것이 int[]을 것처럼 어떻게 추가 Intent 내로 Integer[]를받을 수 있나요 ... 내가 다른 어떤 이유보다 호기심에 대한 자세한 내용을 물어 있도록 for 루프를 해결하려면 너무 열심히하지,하지만?

답변

3

나는 철저하게이 테스트하지 않았습니다 :) 도움이,하지만 난 그것을 작동합니다 생각합니다. 너도해볼 수있어. (작동하지 않음)

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

그리고

정수 [] newArray = (정수 []) getIntent() getSerializableExtra ("com.me.INTARRAY.");

편집 : 아 ..이 위의 것 하지 수 있습니다 약간의 연구 후 및 테스트. 컴파일러가 캐스트를 확인하기 위해 모든 요소를 ​​반복해야하기 때문에 불가능합니다. 대신이 작업을 수행 할 수있는 솔루션 (그리고 내가이 시간 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'반복은 그렇다! –

0

배열을 int []로 변경하고 putExtra(java.lang.String, int[])을 사용하여 추가로 전달할 수 있습니다. 다른 쪽에서는 getIntArrayExtra을 사용하여 추가 요금을 내야합니다. (더 나은 내가 추측입니다) 변환하는 것입니다

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

또 다른 대체 :

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); 

을 다른 측면 : 여기

가 잘 작동 코드입니다, 발신자는 첫 번째와 수신기 다음 LinkedList to 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 : 당신이 잘못 사용한 것 같네요. Integer []가 아닌 int []를위한 것. 나는 결국 그것을 시도하고 잘 작동합니다. 내 게시물을 편집하여 예제 코드를 추가 할 수도 있습니다. – Hassan

+0

@AndrewWyld : 두 번째 대안은 루프를 제거합니다. 그리고 이것이 도움이되고 당신을 위해 일하는 경우, 대답을 수락하는 것을 잊지 마십시오 :) – Hassan