2012-06-18 5 views
0

Я хочу получить изображения контактов и отобразить их в BitmapField s.
Так что я собираю Растровые объекты контактов, используя этот код:Как получить фотографию контакта PIM в виде растрового изображения с использованием RIM5.0?

Vector bitmaps = new Vector(); 
BlackBerryContactList contactList = (BlackBerryContactList)BlackBerryPIM.getInstance().openPIMList(BlackBerryPIM.CONTACT_LIST, BlackBerryPIM.READ_WRITE); 
Enumeration contactListItems = contactList.items(); 
int counter = 0; 
while (contactListItems.hasMoreElements()) { 
    BlackBerryContact contact = (BlackBerryContact)contactListItems.nextElement(); 
    byte[] imageBytes = contact.getBinary(BlackBerryContact.PHOTO, counter); 
    EncodedImage encodedImage = EncodedImage.createEncodedImage(imageBytes, 0, imageBytes.length); 
    Bitmap bitmap = encodedImage.getBitmap(); 
    bitmaps.addElement(bitmap); 
    counter++; 
} 

К сожалению, код бросает java.lang.IllegalArumentException в этом методе:

EncodedImage.createEncodedImage(imageBytes, 0, imageBytes.length); 

Как Шоуда конвертировать byte[] изображение в BitmapField?

ответ

3

Я нашел решение для тех, кто заинтересован, изображения, полученные из PIM, кодируются Base64, его следует сначала декодировать. Вот правильный код:

Vector bitmaps = new Vector(); 
BlackBerryContactList contactList = (BlackBerryContactList)BlackBerryPIM.getInstance().openPIMList(BlackBerryPIM.CONTACT_LIST, BlackBerryPIM.READ_WRITE); 
Enumeration contactListItems = contactList.items(); 
while (contactListItems.hasMoreElements()) { 
    BlackBerryContact contact = (BlackBerryContact)contactListItems.nextElement(); 
    byte[] imageBytesBase64 = contact.getBinary(BlackBerryContact.PHOTO, 0); 
    byte[] imageBytes = Base64InputStream.decode(imageBytesBase64, 0, imageBytesBase64.length); 
    EncodedImage encodedImage = EncodedImage.createEncodedImage(imageBytes, 0, imageBytes.length); 
    Bitmap bitmap = encodedImage.getBitmap(); 
    bitmaps.addElement(bitmap); 
}