ВАЖНО ОБРАТИТЕ ВНИМАНИЕ, ЧТО API IM, РАБОТАЮЩИЙ С ЯЗЫКОМ 2.3.
У меня есть список, который в настоящее время заполнен контактами (в настоящее время 6), которые отправили мне текстовые сообщения в папке входящих сообщений моего устройства. После того, как все контакты собраны и переданы в ArrayList<String>
, ArrayList передается в конструктор для моего класса CustomAdapter. Оттуда это код, который заполняет мой список контактами из моего почтового ящика из моего getView()
метода:
holder.photo = (ImageView) rowView.findViewById(R.id.iv_contactPic);
holder.contact = (TextView) rowView
.findViewById(R.id.contactEntryText);
String folder = "content://sms/inbox/";
Uri mSmsQueryUri = Uri.parse(folder);
contactID = new ArrayList<String>();
try {
c = context.getContentResolver().query(mSmsQueryUri,
new String[] { "_id", "address", "date", "body" },
null, null, null);
if (c == null) {
Log.i(TAG, "cursor is null. uri: " + mSmsQueryUri);
}
c.moveToFirst();
while (c.moveToNext()) {
cid = c.getString(0);
contactID.add(cid); // stores contact IDs
}
} catch (Exception e) {
//Log.e(TAG, e.getMessage());
} finally {
c.close();
}
if(holder != null){
holder.contact.setText(data.get(position)); // displays contact by name
//Contact photo not showing
holder.photo.setImageBitmap(getByteContactPhoto(contactID.get(position));
}
Из приведенного выше кода holder.contact
без проблем отображает 6 контактов. Но проблема в holder.photo
, который вообще ничего не отображает. Вот способ получения фотографий:
public Bitmap getByteContactPhoto(String contactId) {
Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, Long.parseLong(contactId));
Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
Cursor cursor = context.getContentResolver().query(photoUri,
new String[] {Contacts.Photo.DATA15}, null, null, null);
if (cursor == null) {
return null;
}
try {
cursor.moveToFirst();
if (cursor.moveToNext()) {
byte[] data = cursor.getBlob(0);
if (data != null) {
return BitmapFactory.decodeStream( new ByteArrayInputStream(data));
}
}
} finally {
cursor.close();
}
return null;
}
Но в LogCat это единственное, что отображается применительно к фотографиям:
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
W/Resources(15031): Converting to string: TypedValue{t=0x12/d=0x0 a=3 r=0x7f080015}
Есть идеи, как исправить это, чтобы отображались фотографии контактов?
data
является изображением в виде массива ByteArray? - person Graeme   schedule 14.06.2012data
используется только для отображения имени контакта в TextView.contactID.get(position)
возвращает номер идентификатора, затем разбирается в длинный. - person   schedule 14.06.2012data
:BitmapFactory.decodeStream( new ByteArrayInputStream(data))
- person Graeme   schedule 14.06.2012_id
не являетсяContact_id
. Этоthread_id
каждого сообщения, которое у вас было во входящих. Поскольку я предложил вам другой вопрос, правильный способ - найтиContact
, совпадающий сaddress
. Так и поступил встроенный почтовый ящик. - person Trung Nguyen   schedule 01.09.2012