else if (requestCode == BasicInfo.PICK_FROM_ALBUM){
try{
mImageCaptureUri = data.getData(); //앨범의 이미지를 불러옴
File picture = getImageFile(mImageCaptureUri);
filePath = picture.getPath();
photo = BitmapFactory.decodeFile(filePath); //photo는 Imageview입니다.
photoimg.setImageBitmap(photo); //photo에는 이미지가 잘 들어갑니다.
Intent intent = new Intent();
ByteArrayOutputStream bs = new ByteArrayOutputStream(); //bytearraystreem
photo.compress(Bitmap.CompressFormat.PNG, 50, bs); // photo(ImageView)에 담긴 이미지를 컴프레스
byte[] baa = bs.toByteArray(); //
intent.putExtra("byteArray", bs.toByteArray()); //Activity B로 넘김
setResult(RESULT_OK,intent);
}
catch(Exception e){
finish();
}
}
----------------------------Activity B--------------------------------
protected void onActivityResult (int requestCode, int resultCode, Intent data){
if(requestCode == BasicInfo.WRITE){ //글쓰기(ActivityA)
if(resultCode == RESULT_OK){
if(getIntent().hasExtra("byteArray")) {
Bitmap btm = BitmapFactory.decodeByteArray(getIntent().getByteArrayExtra("byteArray")
,0,getIntent().getByteArrayExtra("byteArray").length); //btm에 값을 담고
String writemsg = data.getStringExtra("Write");
arrData.add(new Listview_data(R.drawable.asd, btm, writemsg));
//Listview_data(int, bitmap, string) 입니다 ㅡ ImageView, ImageView, TextView
timeline_adapter.notifyDataSetChanged();
}
}
}
}
검색해봤더니 비트맵이미지 그대로는 인텐트에서 인자로 받을수가 없기때문에
스트림형태로 bytearray에 담아서 다른 액티비티에 넘겨야 한다고 들었습니다
앨범에서 불러온 사진이 Activity A의 photo(ImageView)에는 잘 표시가 되는데요
Activity B로 넘기면 오류는 안나는데 않는데 값이 넘어가질 않네요
다른 값들은 Activity B의 리스트뷰에 잘 표시되는데 사진만 아무리해도 추가가 안됩니다
어떻게해야할지 모르겠네요 아니면 방법이 잘못된건가요? 다른 방법도있는건지..
답변 부탁드리겠습니다!
안드로이드에서 intent 시에 putExtra 메쏘드로 넘길수 있는 data type 은 기본적으로 자바의 primitive type, primitive type의 array 및 String 이 있습니다. 그 외에 추가로 parcelable, serializable, bundle 이 있구요..
위의 경우 byteArray type 이라서 putExtra로 데이터를 넘기고 getByteArrayExtra로 받는 것 자체는 문제가 없습니다.
제대로 전달이 안되는 것은 다른 이유가 있는 것 같네요..
B activity 에서 if(getIntent().hasExtra("byteArray")) 위 아래쪽으로 로그를 찍어서 제대로 분기문을 타는지, 넘어온 데이터의 length는 0이 아닌지 확인을 해보시는게 좋겠습니다.
로직이 약간 꼬인것처럼 보이는데 글쓴분 소스를 보면 B -> A -> B 형태로 activity 이동이 이루어지는 것 같은데 A activity 에서 setResult후에 finish를 catch문 안에하면 exception이 나지 않는 이상 A activity가 종료되지 않을것으로 보이네요. 혹시 exception이 난게 아닌건지 확인해 보시구요. stream도 사용 후에는 반드시 close를 해주시는게 좋습니다.
위 소스만 보면 a activity에서 이미 이미지의 uri 를 data.getData() 를 이용해서 받아오시는 것 같은데.. 이 uri 를 string 형태로 B에 넘겨주시고 B의 onActivityResult 에서 uri를 가지고 bitmap을 만드시는게 어떠실지요..
받을때는 getParcel 어쩌구 하는걸로 받았던걸로 기억하는데요