BitmapFactory.decodeStream 总是返回空值

Posted

技术标签:

【中文标题】BitmapFactory.decodeStream 总是返回空值【英文标题】:BitmapFactory.decodeStream always returning null value 【发布时间】:2014-02-11 17:44:05 【问题描述】:

我在这里从 Cursor 获取值:

    if (mProfileCursor.moveToFirst()) 
        byte[] blob = mProfileCursor.getBlob(
            mProfileCursor.getColumnIndex(ContactsContract.Profile.PHOTO_URI));
        ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);
        BufferedInputStream bis = new BufferedInputStream(inputStream,1024);
        bitmap = BitmapFactory.decodeStream(bis);
    
 finally 
    if (mProfileCursor != null) 
        mProfileCursor.close();
    

我正在尝试将 byte[] 更改为位图,但我总是得到 null,根据以下帖子 android: bitmapfactory.decodestream returns null 中的答案,我尝试了 BufferedInputStream 但它是不为我工作。 还有Romain Guy这里说这是android中的一个已知缺陷,但答案很老,如果有办法让位图正确,请告诉我。

【问题讨论】:

PHOTO_URI 是文本,而不是 blob 【参考方案1】:

公共静态最终字符串 PHOTO_URI

在 API 级别 11 中添加 可用于检索联系人全尺寸照片的 URI。如果 PHOTO_FILE_ID 不为空,这将使用基于 CONTENT_URI 的 URI 填充。否则,这将填充与 PHOTO_THUMBNAIL_URI 相同的值。照片可以通过 URI(此字段)或 ID(请参阅 PHOTO_ID)来引用。如果 PHOTO_FILE_ID 或 PHOTO_ID 不为空,则 PHOTO_URI 和 PHOTO_THUMBNAIL_URI 不应为空(但不一定反之亦然)。因此,使用 PHOTO_URI 是一种更可靠的检索联系人照片的方法。

类型:文本

常量值:“photo_uri”

这就是文档所说的,pskink 是对的,它返回一个字符串。还要添加 decodeStream 如果它无法解码图像数据并且它也不会产生任何异常,则返回 null ,所以要小心,在使用它之前检查值。

【讨论】:

以上是关于BitmapFactory.decodeStream 总是返回空值的主要内容,如果未能解决你的问题,请参考以下文章