试图获取联系人照片Android

时间:2015-10-08 09:37:51

标签: android

我正在处理一个联系人应用程序,它显示未接来电,已拨电话,当有人的手机号码不是来电时问题就出现了,我有一个方法试图根据手机号码获取来电者姓名然后另一个根据号码获取contactID然后将名称,号码和contactID保存在SQLlited数据库中如果调用者没有保存在电话簿中,则contactID被分配一个随机的Interger,当我想要检索呼叫者时,我呼叫获取显示的数字,名称和联系人ID的方法我使用contactID来通过电话运行并检索调用者的显示图片,但是当联系人未保存时查看错误即将发生的事情,检索调用者的方法未保存,存储在contactID变量中的随机值与手机匹配如果发生这种情况我在IllegalArgumentException上得到context.getContentResolver().query(photoUri, new String[]{ContactsContract.Contacts.Photo.PHOTO}, null, null, null);异常这是我的完整方法,返回显示位图

  public Bitmap openPhoto(long contactId, Context context) {
    Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
    Uri photoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
    Cursor cursor = context.getContentResolver().query(photoUri,
            new String[]{ContactsContract.Contacts.Photo.PHOTO}, null, null, null);
    if (cursor == null) {
        return null;
    }
    try {
        if (cursor.moveToFirst()) {
            byte[] data = cursor.getBlob(0);
            if (data != null) {

                Log.d("BTmap","Bitmap Exists");
                return BitmapFactory.decodeStream(new ByteArrayInputStream(data));
            }
        }
    } finally {
        cursor.close();
    }
    Log.d("BTmap","Bitmap Dont Exist");
    return null;


}

当我在openPhoto尝试捕获块中运行(IllegalArgumentException e)方法时,任何人都可以帮助我解决这个错误。非显示图片加载甚至保存在联系簿中的那些他们有照片,谢谢你。

1 个答案:

答案 0 :(得分:0)

我解决了它,这很容易,首先我必须检查调用的号码是否保存在我的电话簿中,如果没有,我将名称设置为未保存,然后在我的适配器中我必须检查适配器。 getName()值等于Unsaved,然后就没有需要加载图像了,我只需将我的imageview指定为null或我的默认显示图片