본문 바로가기

PROGRAMING/Android

Intent로 Activity 열기 getIntent로 전달된 값 받기

Intent로 Activity 열기 getIntent로 전달된 값 받기

시나리오 

Intent로 Activity를 새로 열고 데이터를 보내려고 했다.

문제

long 형 배열을 보내려고 시도 했으나 

받는 쪽에서 형변환 오류가 발생 

원인

Long형 배열을 putExtra해서 보냈습니다만

다음 Activity에서 사용한intent.getLongArrayExtra(name) 는 long 형으로 변환하려고 했다.

해결

ArrayList<Long>형태로 put 하고

다음 Activity에서는 intent.getSerializableExtra(name);를 사용하고 Casting 하여 사용했다.

ArrayList<Long> ids= (ArrayList<Long>) intent.getSerializableExtra(name);

정상동작 한다

교훈

Long과 long 자료형은 android 함수에서 때때로 casting문제를 일으킬수 있다.


보내는 Activity

ArrayList<Long> longArrayList = new ArrayList<Long>();

while (iterator.hasNext()) {

Long id = (Long) iterator.next();

AudioContent audioContent = mCheckBoxHashMap.get(id);

longArrayList.add(id);

audioContent.print();

}

//http://iamflower.tistory.com/391

if(longArrayList.size()>0) {

Intent intent = new Intent(this.getActivity(),FavoriteAddActivity.class);

intent.putExtra(IDS,longArrayList);

this.startActivity(intent);

}


열리는 Activity

Intent intent = getActivity().getIntent();

ArrayList<Long> ids= (ArrayList<Long>) intent.getSerializableExtra(AudioMediaFragment.IDS);


ArrayList<String> tmpIds= new ArrayList<String>();

for(int i=0;i<ids.size();i++){

tmpIds.add(String.valueOf(ids.get(i)));

}

mIds=tmpIds.toArray(new String[]{});


Intent에서 getExtra에 담겨 있는 키값을 알아보는 함수를 하나 구현해보았다.

public static void printIntentBundleKes(Activity activity){

LOG.i(CLASSNAME, "printBundleKes activity : "+activity);

Intent intent = activity.getIntent();

Bundle bundle =intent.getExtras();

Set<String> tmp = bundle.keySet();

Iterator<String>   bb = tmp.iterator();

while(bb.hasNext()) {

LOG.d(CLASSNAME, "printBundleKes key value :" +bb.next());

}

}


전송하는 쪽에서 제대로 전달되고 있는 지 확인할 때 유용할 것이다.