2015-03-19 3 views
0

Я пытаюсь получить изображение контакта, но его всегда бросает NPE. Может кто-нибудь сказать мне, что не так?Получить контактное изображение throws NPE

Вот мой код:

Uri u = getPhotoUri(data.get(position).getContactID()); 
      Log.d("adapter", u.toString() + " uri"); 
      if (u != null) { 
       holder.image.setImageURI(u); 
      } else { 
       holder.image.setImageResource(R.mipmap.ic_launcher); 
      } 

и метод:

private Uri getPhotoUri(String ID) { 
     try { 
      Cursor cur = activity.getContentResolver().query(
        ContactsContract.Data.CONTENT_URI, 
        null, 
        ContactsContract.Data.CONTACT_ID + "=" + ID + " AND " 
          + ContactsContract.Data.MIMETYPE + "='" 
          + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null, 
        null); 
      if (cur != null) { 
       if (!cur.moveToFirst()) { 
        return null; // no photo 
       } 
      } else { 
       return null; // error in cursor process 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 
     Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long 
       .parseLong(ID)); 
     return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 
    } 
+0

который lin e бросает? – eduyayo

+0

@eduyayo на этом 'Log.d (« адаптер », u.toString() +« uri »);', но у выбранного контакта есть изображение –

+0

Неправильно то, что вы должны добавить окончательный блок, закрывающий курсор. Но в любом случае. Пользователь, которого вы ищете, возвращает открытый курсор, а 'moveToFirst()' возвращает true? – eduyayo

ответ

0

Вы можете изменить свой код

Uri u = getPhotoUri(data.get(position).getContactID()); 

      if (u != null) { 
      Log.d("adapter", u.toString() + " uri"); 
       holder.image.setImageURI(u); 
      } else { 
       holder.image.setImageResource(R.mipmap.ic_launcher); 
      } 

Кажется u.toString() бросает исключение

Смежные вопросы