안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요. 해결방법을 찾기가 어려워 이렇게 질문 올립니다.
현재 2.1버전에서 작업중입니다.
contact 쪽의 정보를 갖고와서 화면에 뿌려주고 싶은데 이름이나 전화번호 이메일등은 잘 받아오는데 사진에서
null 값만 가져옵니다. 조언좀 부탁드립니다.ㅠ.ㅠ
public Bitmap PhotoOfPerson(String id) { // id = person_id
Bitmap orgImage = null;
Cursor cursor = null;
cursor = this.cr.query(ContactsContract.Data.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Photo.RAW_CONTACT_ID +" = ?", new String[]{id}, null);
while (cursor.moveToNext()) {
int index = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Photo.PHOTO);
byte[] photoImage = cursor.getBlob(index); // 이부분에서 byte 값으로 null 값이 찍힙니다.
orgImage = BitmapFactory.decodeByteArray(photoImage, 0, photoImage.length, options);
}
cursor.close();
return(orgImage);
}
현재 2.1버전에서 작업중입니다.
contact 쪽의 정보를 갖고와서 화면에 뿌려주고 싶은데 이름이나 전화번호 이메일등은 잘 받아오는데 사진에서
null 값만 가져옵니다. 조언좀 부탁드립니다.ㅠ.ㅠ
public Bitmap PhotoOfPerson(String id) { // id = person_id
Bitmap orgImage = null;
Cursor cursor = null;
cursor = this.cr.query(ContactsContract.Data.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Photo.RAW_CONTACT_ID +" = ?", new String[]{id}, null);
while (cursor.moveToNext()) {
int index = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Photo.PHOTO);
byte[] photoImage = cursor.getBlob(index); // 이부분에서 byte 값으로 null 값이 찍힙니다.
orgImage = BitmapFactory.decodeByteArray(photoImage, 0, photoImage.length, options);
}
cursor.close();
return(orgImage);
}
2010.03.22 02:27:59
만약 쿼리가 이미지나 사운드 같은 바이너리 데이터를 리턴할 수 있다면, 그 데이터가 테이블 안에 직접 입력되어 있을 수도 있고, 또는 그 데이터에 대한 테이블 엔트리는 여러분이 데이터를 얻을 수 있는 content: URI를 지정하는 문자열이될 수도 있을 것이다.
일반적으로 더 작은 양의 데이터(20에서 50K 이하까지, 또는 그 이하를 말함)는 흔히 테이블에 직접적으로 입력되며, Cursor.getBlob()를 호출함으로써 읽어질 수 있다. 그것은 바이트 배열을 리턴한다.
만일 테이블 엔트리가 content: URI라면, 여러분은 직접 파일을 오픈하고 읽는 것을 결코 시도해서는 안된다(첫 째는 퍼미션 문제가 이것을 실패하게 만들 수 있다). 대신에, 여러분은 데이터를 읽기 위해 사용할 수 있는 InputStream 오브젝트를 얻기 위해 ContentResolver.openInputStream()을 호출해야 한다.
라고 적혀있는데요... 아마도 크기가 50k보다 커서 다른 방법을 써야하지 않을까요? 먼저 URI 를 주는지 알아보시는게 좋을 것 같아요~
그리고;ㅂ; 성공하시면 어떻게 하셨다고 가르쳐주세요...;; 저도 아직 이부분 해결한게 아니라서용