2016-07-06 7 views
1

Я могу получить все мои контакты и отобразить их в списке. Я получаю фотографию контактов. Моя проблема в том, что если у контакта нет фотографии, в моем списке ничего не отображается (пробел). Я пытаюсь проверить место, если у ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI есть фотография или нет, но я не могу найти способ сделать это.Как проверить, есть ли у ContactsContract фото или нет

В резюме, что я хочу, если у контакта есть фото, на фото, если нет, отобразите значок.

Любая помощь будет полезной!

Код:

private final static String[] FROM_COLUMNS = { 
      ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
      ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI 
    }; 
    private final static int[] TO_IDS = { 
      R.id.contactName, 
      R.id.message_subtitle, 
      R.id.contact_imageview 
    }; 
    private static final String[] PROJECTION = { 
      ContactsContract.CommonDataKinds.Phone._ID, 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID, 
      ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
      ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI 
    }; 

    private static final String SELECTION = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " LIKE ?"; 
    private String[] mSelectionArgs = {"%%"}; 

    private ListView mContactsList; 
    private SimpleCursorAdapter mCursorAdapter; 

    public contacts() { 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.contacts_list_fragment, container, false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     mContactsList = (ListView) getActivity().findViewById(R.id.contacts_list); 
     mCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.list_item, null, FROM_COLUMNS, TO_IDS, 0); 
     mContactsList.setOnItemClickListener(this); 
     mContactsList.setAdapter(mCursorAdapter); 
     getLoaderManager().initLoader(0, null, this); 
    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
     return new CursorLoader(getActivity(), ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, SELECTION, mSelectionArgs, 
       ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" ASC"); 
    } 

ответ

1

Попробуйте это:

изменение

ContactsContract.CommonDataKinds.Phone. 

в

ContactsContract.Contacts. 

в вашем onCreateLoader:

return new CursorLoader(getActivity(), baseUri, PROJECTION, select, null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

В адаптере:

@Override 
     public void bindView(View view, Context context, Cursor cursor) { 

      ImageView imageView = (ImageView) view.findViewById(R.id.contact_imageview); 
      Bitmap profileImage = getPhoto(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))); 


      if(profileImage !=null) { 
       imageView.setImageBitmap(profileImage); 
      }else{ 
       imageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_contact)); 
      } 
     } 

     private Bitmap getPhoto(String id){ 

      Bitmap photo = null; 
      try{ 
       InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(
         getActivity().getContentResolver(), 
         ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI , new Long(id).longValue())); 
       if(inputStream != null) 
        photo= BitmapFactory.decodeStream(inputStream); 
      }catch (Exception e){ 

      } 
      return photo; 
     } 
    }