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());
}
}
전송하는 쪽에서 제대로 전달되고 있는 지 확인할 때 유용할 것이다.
'PROGRAMING > Android' 카테고리의 다른 글
PlayList특정 재생 항목의 Music들의 재생순서 변경하기 moveItem 사용 (0) | 2013.03.15 |
---|---|
Playlists.Members.getContentUri와 PlayList안의 음악들 조회 (0) | 2013.03.14 |
thread를 돌려서 callback으로 데이터 얻어오기 (0) | 2013.03.12 |
Android log 저장방법 UncaughtExceptionHandler 구현과 android.app.application (0) | 2013.03.06 |
Fragment 에서 BackStack 사용안하기. (0) | 2013.03.04 |